ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

redandgreen

2021-09-07 10:04:31  阅读:179  来源: 互联网

标签:const frame mask yellow Scalar redandgreen 255


if (frame.empty())
    break;
frame1 = frame.clone();
dst = Mat::zeros(frame.size(), frame.type());
mask = Mat::zeros(frame.size(), CV_8U);
cvtColor(frame, gray, COLOR_BGR2GRAY);
vector<Vec3f> circles;
HoughCircles(gray, circles, HOUGH_GRADIENT, 1, 10, 40, 40, 10, 25);![图片说明](https://www.icode9.com/i/ll/?i=img_convert/3380d90e268756fa3eb6afff613c71e6.png)

for (size_t i = 0; i < circles.size(); i++)
{
    Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
    int radius = cvRound(circles[i][2]);
    circle(mask, center, radius, Scalar(255), -1); //roi
    frame1.copyTo(dst, mask);
    //绘制圆心
    circle(frame, center, 3, Scalar(0, 255, 0), -1, 8, 0);
    //绘制圆的轮廓
    circle(frame, center, radius, Scalar(155, 50, 255), 3, 8, 0);
    circle(mask, center, radius, Scalar(255), -1);
}

if(detectColor(dst)==1)
putTextZH(frame, "红灯", Point(200, 150), Scalar(255, 0, 255), 50, "楷体");
else if(detectColor(dst)==2)
    putTextZH(frame, "绿灯", Point(200, 150), Scalar(255, 0, 255), 50, "楷体");
else //if(detectColor(dst)==3)
    putTextZH(frame, "黄灯", Point(200, 150), Scalar(255, 0, 255), 50, "楷体");
imshow("vedio", frame);
if (waitKey(100) == 27)
    break;

}
cap.release();
destroyAllWindows();
return 0;
}
int detectColor(Mat image)
{
Mat mask;
cvtColor(image, image, COLOR_BGR2HSV);
const Scalar hsvRedLo(10, 193, 198);
const Scalar hsvRedHi(28, 220,206);

const Scalar hsvGreenLo(72, 242, 186);
const Scalar hsvGreenHi(90, 255, 255);

const Scalar hsvYellowLo(24, 219, 196);
const Scalar hsvYellowHi(32, 255, 217);

vector hsvLo{ hsvRedLo,hsvGreenLo,hsvYellowLo };
vector hsvHi{ hsvRedHi,hsvGreenHi,hsvYellowHi };

inRange(image, hsvLo[1], hsvHi[1], mask);
inRange(image, hsvLo[2], hsvHi[2], mask);
inRange(image, hsvLo[0], hsvHi[0], mask);

Mat redBlur, greenBlur, yellowBlur;
medianBlur(mask, redBlur, 5);
medianBlur(mask, greenBlur, 5);
medianBlur(mask, yellowBlur, 5);
int red, green, yellow, lightColor;
red = countNonZero(redBlur);
green = countNonZero(greenBlur);
yellow = countNonZero(yellowBlur);
lightColor = (red > green) ? (red > yellow ? red : yellow) : (green > yellow ? green : yellow);
if (lightColor == red)
return 1;
else if (lightColor == green)
return 2;
else if (lightColor == yellow)
return 3;
else return 0;
}

标签:const,frame,mask,yellow,Scalar,redandgreen,255
来源: https://blog.csdn.net/qq_41911261/article/details/120151982

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有