基于OpenCV红色圆形检测c++程序
时间: 2023-08-08 14:14:14 浏览: 108
下面是基于OpenCV的红色圆形检测C++程序:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取图像
Mat img = imread("image.jpg", IMREAD_COLOR);
// 将图像转成HSV颜色空间
Mat hsv;
cvtColor(img, hsv, COLOR_BGR2HSV);
// 设定红色的HSV范围
Scalar lower_red = Scalar(0, 70, 50);
Scalar upper_red = Scalar(10, 255, 255);
Scalar lower_red2 = Scalar(170, 70, 50);
Scalar upper_red2 = Scalar(180, 255, 255);
// 提取红色区域
Mat mask1, mask2, mask;
inRange(hsv, lower_red, upper_red, mask1);
inRange(hsv, lower_red2, upper_red2, mask2);
bitwise_or(mask1, mask2, mask);
// 霍夫圆变换检测圆形
std::vector<Vec3f> circles;
HoughCircles(mask, circles, HOUGH_GRADIENT, 1, mask.rows / 8, 200, 100, 0, 0);
// 绘制圆形
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(img, center, radius, Scalar(0, 0, 255), 2, LINE_AA);
}
// 显示结果
imshow("result", img);
waitKey(0);
return 0;
}
```
这个程序的大致流程如下:
1. 读入图像,将图像转换为HSV颜色空间;
2. 设定红色的HSV范围,提取红色区域;
3. 使用霍夫圆变换检测圆形;
4. 绘制检测到的圆形;
5. 显示结果。
需要注意的是,这个程序默认红色为H值在0-10和170-180之间的颜色,S和V值在一定范围内。如果需要检测其他颜色,需要根据实际情况进行调整。
阅读全文