写一份c++代码,识别红色和蓝色,用圆形框画在原始图像红色区域,用矩形框画在原始图像蓝色区域
时间: 2024-03-15 07:46:13 浏览: 62
C++语言编写画矩形程序
5星 · 资源好评率100%
好的,以下是一份简单的C++代码,使用OpenCV库实现了红色和蓝色区域的识别,并在原始图像中用圆形框和矩形框标出:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读入原始图像
Mat image = imread("image.jpg");
// 转换颜色空间为HSV
Mat hsv_image;
cvtColor(image, hsv_image, COLOR_BGR2HSV);
// 设定红色和蓝色的颜色范围
Scalar lower_red = Scalar(0, 70, 50);
Scalar upper_red = Scalar(10, 255, 255);
Scalar lower_blue = Scalar(100, 70, 50);
Scalar upper_blue = Scalar(130, 255, 255);
// 根据颜色范围进行颜色提取
Mat red_mask, blue_mask;
inRange(hsv_image, lower_red, upper_red, red_mask);
inRange(hsv_image, lower_blue, upper_blue, blue_mask);
// 使用形态学操作去除噪声
Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(5, 5));
morphologyEx(red_mask, red_mask, MORPH_OPEN, kernel);
morphologyEx(blue_mask, blue_mask, MORPH_OPEN, kernel);
// 寻找红色和蓝色区域的轮廓
std::vector<std::vector<Point>> red_contours, blue_contours;
findContours(red_mask, red_contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
findContours(blue_mask, blue_contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 在原始图像中标出红色和蓝色区域
for (auto contour : red_contours)
{
Rect rect = boundingRect(contour);
Point center = Point(rect.x + rect.width / 2, rect.y + rect.height / 2);
circle(image, center, rect.width / 2, Scalar(0, 0, 255), 2);
}
for (auto contour : blue_contours)
{
Rect rect = boundingRect(contour);
rectangle(image, rect, Scalar(255, 0, 0), 2);
}
// 显示结果图像
imshow("Result", image);
waitKey(0);
return 0;
}
```
其中,我们首先读入原始图像,并将其转换到HSV颜色空间。然后,我们设定红色和蓝色的颜色范围,并根据颜色范围进行颜色提取。接着,我们使用形态学操作去除噪声,并寻找红色和蓝色区域的轮廓。最后,我们在原始图像中标出红色和蓝色区域,并展示结果图像。
阅读全文