计算机视觉|Opencv 基于C++识别绿灯

Opencv 基于C++识别绿灯 **
【计算机视觉|Opencv 基于C++识别绿灯】计算机视觉|Opencv 基于C++识别绿灯
文章图片

基本思路 1.对inRange图像 获取绿色像素点区域
2.对图像二值化处理
3.框选ROI区域
图片: 计算机视觉|Opencv 基于C++识别绿灯
文章图片

带尺寸的图片: 计算机视觉|Opencv 基于C++识别绿灯
文章图片

甘特图功能 Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid 整体代码就是这样:

#include #include #include #include #include using namespace cv; using namespace std; clock_t start,finish; Mat srcImage; vectorcircles; Mat templateImage; Mat resultImage; //void processFrame(Mat& img, Rect& rect); //绘制外接矩形 double area=0.0; void processFrame(Mat & img, Rect & rect) { //寻找外接轮廓 vectorcontours; vectorhierarchy; findContours(img, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point(-1, -1)); if (contours.size() > 0) { for (size_t i = 0; i < contours.size(); i++) { double contours_Area = contourArea(contours[static_cast(i)]); //面积 rect = boundingRect(contours[static_cast(i)]); //外接矩形 if (contours_Area > area) { area = contours_Area; } } } else { rect.x = rect.y = rect.width = rect.height = 0; } }int main(int argc, char** argv) { Rect roi; //存储最大外接矩形的数据 VideoCapture capture; capture.open(2); if (!capture.isOpened()) { cout << "图像读取错误!~" << endl; return -1; } Mat frame,dst; int Number_of_successful=-1; int number=-1; Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1)); Mat kernel_dilite = getStructuringElement(MORPH_RECT, Size(7, 7), Point(-1, -1)); while (capture.read(frame)) { start = clock(); //筛选出绿色 inRange(frame, Scalar(0, 127, 0), Scalar(120, 255, 120), dst); //开操作去噪点 morphologyEx(dst, dst, MORPH_OPEN, kernel, Point(-1, -1), 1); //膨胀操作把绿灯具体化的显示出来 dilate(dst, dst, kernel_dilite, Point(-1, -1), 2); imshow("output video", dst); processFrame(dst, roi); rectangle(frame, roi, Scalar(0, 0, 255), 3, 8, 0); if(area>=800)//根据距离调参数(800) {cout<<"绿灯完成"<

    推荐阅读