红色的HSV范围
时间: 2023-12-04 18:11:47 浏览: 141
红色的HSV范围可以根据实际情况进行调整,但通常情况下可以使用以下范围:
- 红色范围1:H为0-10,S为70-255,V为70-255
- 红色范围2:H为156-180,S为70-255,V为70-255
以下是使用OpenCV的代码示例,实现红色的提取:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取图像并转换为HSV颜色空间
Mat image = imread("test.jpg");
Mat hsvImage;
cvtColor(image, hsvImage, COLOR_BGR2HSV);
// 定义红色的HSV值范围
Scalar lowerRed1(0, 70, 70);
Scalar upperRed1(10, 255, 255);
Scalar lowerRed2(156, 70, 70);
Scalar upperRed2(180, 255, 255);
// 提取红色部分
Mat redMask1, redMask2, redMask;
inRange(hsvImage, lowerRed1, upperRed1, redMask1);
inRange(hsvImage, lowerRed2, upperRed2, redMask2);
redMask = redMask1 | redMask2;
// 形态学操作
Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
morphologyEx(redMask, redMask, MORPH_OPEN, kernel);
// 轮廓检测
vector<vector<Point>> contours;
findContours(redMask, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 筛选轮廓
vector<vector<Point>> redContours;
for (int i = 0; i < contours.size(); i++)
{
double area = contourArea(contours[i]);
if (area > 1000)
{
redContours.push_back(contours[i]);
}
}
// 绘制轮廓
Mat result = image.clone();
drawContours(result, redContours, -1, Scalar(0, 0, 255), 2);
// 显示结果
imshow("image", image);
imshow("result", result);
waitKey(0);
return 0;
}
```
其中test.jpg是需要进行红色识别的图像,可以根据实际情况进行修改。在代码中,提取红色部分使用了inRange函数,形态学操作使用了morphologyEx函数,轮廓检测使用了findContours函数,轮廓筛选使用了contourArea函数。最终结果会在result窗口中显示出来。
阅读全文