我使用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)我想检测蓝线是否在图像的下半部分(在图片的正前方)然后执行动作(制作汽车)停止)
感谢您的时间。
PS。谢谢Saransh Kejriwal,我现在正在尝试国旗。
答案 0 :(得分:1)
您可以采用以下两种方式:
1)画一条蓝线时设置一个标志:
每当你画一条蓝线时,设置一个int flag = 1。
drawline();
flag=1;
这可以在&#39;中查看&#39;条件。因此,当flag为1时,这意味着您之前已经绘制了一条蓝线。如果它符合您的要求,它会更加整洁。
2)设计蓝色滤镜 如果您在拨打&#39; if&#39;之前已经绘制了蓝线。声明,这是你遵循的算法, - 使用inRange设计蓝色遮罩,并将遮罩保存在不同的Mat对象上(Mat mask;) - 在面具上应用findContours。检查您获得的每个轮廓的轮廓区域。 - 如果您绘制了一条线,其中一条轮廓将具有一个重要区域,那么您可以在条件为:
时应用if(contourArea(contours[i])>some_threshold_value)
{
//your code here
}