gpt4 book ai didi

c++ - 用 if 语句检测蓝线

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:29 26 4
gpt4 key购买 nike

我使用 OpenCV 和 Houghlines(在 C++ 中)制作了一条蓝线,我想知道在 if 语句中包含什么,该语句应该检测蓝线是否存在以及它是否执行操作。

我尝试使用 cv::inRange 函数来检测蓝色,但我无法在 if 语句中使用它。

下面是绘制蓝线的代码:

         vector<Vec2f> lines;
HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 );

for(size_t i = 0;i < lines.size();i++)
{
float rho = lines[i][0], theta = lines[i][1];

//scan only for horizontal line)
if(theta > CV_PI/180*80 && theta < CV_PI/180*100){

Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));

//draw the line in blue
cvLine(m_image, pt1, pt2, Scalar(255,0,0), 3, CV_AA);
}
}
}

基本上我想做的是

if (blue line exists) {
do something
}

这是我得到的当前图像。 (忽略绿线和红线,它基本上是道路上汽车的 POV)我想检测蓝线何时进入图像的下部(在图片的正前方)然后执行 Action (让汽车停止)

POV of the car

感谢您的宝贵时间。

附言。谢谢 Saransh Kejriwal,我现在正在尝试使用 Flag。

最佳答案

有两种方法可以遵循:

1) 画蓝线时设置一个标志:

每画一条蓝线,就设置一个int flag=1。

drawline();
flag=1;

这可以在“if”条件下检查。所以当 flag 为 1 时,这意味着您之前画了一条蓝线。如果它符合您的要求,它会更整洁。

2) 设计一个蓝色滤色器如果您在调用“if”语句之前画了蓝线,那么这里是您遵循的算法,-使用inRange设计一个蓝色 mask ,并将 mask 保存在不同的Mat对象上(Mat mask;)- 在面具上应用 findContours。检查您获得的每个轮廓的轮廓区域。- 如果你画了一条线,其中一个轮廓将有一个显着的区域,那么你可以应用 if 条件为:

if(contourArea(contours[i])>some_threshold_value)
{
//your code here
}

关于c++ - 用 if 语句检测蓝线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37112806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com