Opencv 基于C++识别绿灯 **
【计算机视觉|Opencv 基于C++识别绿灯】
文章图片
基本思路 1.对inRange图像 获取绿色像素点区域
2.对图像二值化处理
3.框选ROI区域
图片:
文章图片
带尺寸的图片:
文章图片
甘特图功能 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<<"绿灯完成"<
推荐阅读
- python|OpenCV-Python实战(21)——OpenCV人脸检测项目在Web端的部署
- 目标检测|目标检测算法的分类和优缺点
- Opencv|OpenCV——图像形态学操作
- OpenCV|opencv (三十七)图像形态学——腐蚀
- 论文|Vision Transformer(学习博客总结)
- 计算机视觉|OpenCV的简单使用教程与基本函数(C++版本)
- Python从零到壹|[Python从零到壹] 四十三.图像增强及运算篇之图像点运算和图像灰度化处理
- #|深度学习及图像分类阶段作业与阶段总结
- opencv|dlib和opencv编程——人脸识别数据集的建立