如何寻找图像中黄色区域的角点C++
时间: 2024-03-04 17:50:21 浏览: 49
要图像中寻找黄色区域的角点,可以先将图像转换为HSV空间,然后利用颜色信息提取出黄色区域,最后再利用角点检测算法找到角点。
首先,将图像转换为HSV空间。
```c++
cv::Mat imgHSV;
cv::cvtColor(img, imgHSV, cv::COLOR_BGR2HSV);
```
然后,提取出黄色区域。
```c++
cv::Mat imgYellow;
cv::inRange(imgHSV, cv::Scalar(20, 100, 100), cv::Scalar(30, 255, 255), imgYellow);
```
这里使用了inRange函数,提取出了HSV空间中颜色值在一定范围内的像素。上面的代码提取出了颜色值在范围(20, 100, 100)到(30, 255, 255)之间的像素,即黄色区域。
接下来,可以使用Canny函数对黄色区域进行边缘检测。
```c++
cv::Mat imgGray;
cv::cvtColor(imgYellow, imgGray, cv::COLOR_BGR2GRAY);
cv::Mat imgCanny;
cv::Canny(imgGray, imgCanny, 50, 150);
```
最后,可以使用cornerHarris函数来检测图像中的角点。
```c++
cv::Mat imgDst;
cv::cornerHarris(imgCanny, imgDst, 2, 3, 0.04);
cv::Mat imgDstNorm;
cv::normalize(imgDst, imgDstNorm, 0, 255, cv::NORM_MINMAX);
cv::Mat imgThreshold;
cv::threshold(imgDstNorm, imgThreshold, 200, 255, cv::THRESH_BINARY);
std::vector<cv::Point> corners;
for (int i = 0; i < imgThreshold.rows; i++) {
for (int j = 0; j < imgThreshold.cols; j++) {
if (imgThreshold.at<uchar>(i, j) == 255) {
corners.push_back(cv::Point(j, i));
}
}
}
```
这里的代码与前面提到的代码非常相似,只是将输入图像从原始图像改为了边缘图像imgCanny。在角点检测之后,可以得到黄色区域中的角点坐标。需要注意的是,角点检测之前需要将图像转换为灰度图像。
阅读全文