基于c++下的opencv对红蓝板进行识别,框选并标明颜色的代码
时间: 2023-04-05 22:00:19 浏览: 104
以下是基于 C 语言下的 OpenCV 对红蓝板进行识别、框选并标明颜色的代码:
```
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("board.jpg"); // 读取图片
if (img.empty()) // 判断图片是否读取成功
{
cout << "无法读取图片!" << endl;
return -1;
}
Mat hsv_img;
cvtColor(img, hsv_img, COLOR_BGR2HSV); // 转换为 HSV 颜色空间
// 定义红色和蓝色的 HSV 颜色范围
Scalar lower_red = Scalar(0, 100, 100);
Scalar upper_red = Scalar(10, 255, 255);
Scalar lower_blue = Scalar(110, 100, 100);
Scalar upper_blue = Scalar(130, 255, 255);
// 对红色和蓝色进行二值化处理
Mat red_mask, blue_mask;
inRange(hsv_img, lower_red, upper_red, red_mask);
inRange(hsv_img, lower_blue, upper_blue, blue_mask);
// 对红色和蓝色进行形态学操作,去除噪点
Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
morphologyEx(red_mask, red_mask, MORPH_OPEN, kernel);
morphologyEx(blue_mask, blue_mask, MORPH_OPEN, kernel);
// 在原图上绘制红色和蓝色的矩形框
vector<vector<Point>> contours_red, contours_blue;
findContours(red_mask, contours_red, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
findContours(blue_mask, contours_blue, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
for (int i = 0; i < contours_red.size(); i++)
{
Rect rect = boundingRect(contours_red[i]);
rectangle(img, rect, Scalar(0, 0, 255), 2);
}
for (int i = 0; i < contours_blue.size(); i++)
{
Rect rect = boundingRect(contours_blue[i]);
rectangle(img, rect, Scalar(255, 0, 0), 2);
}
// 显示结果
imshow("result", img);
waitKey(0);
return 0;
}
```
希望能对您有所帮助!
阅读全文