c++ opencv 检测图像中心附近 是否存在黑色区域,如果存在,把黑色的轮廓画出来
时间: 2024-03-02 14:54:39 浏览: 21
可以使用OpenCV中的一些函数来实现这个功能。具体步骤如下:
1. 读取图像并转化为灰度图像。
```c++
Mat image = imread("your_image.jpg");
Mat gray_image;
cvtColor(image, gray_image, CV_BGR2GRAY);
```
2. 对灰度图像进行二值化处理。
```c++
Mat binary_image;
threshold(gray_image, binary_image, 100, 255, THRESH_BINARY);
```
这里的阈值100可以根据具体情况来调整。
3. 查找轮廓。
```c++
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary_image, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
```
4. 遍历轮廓并绘制黑色轮廓。
```c++
Mat result_image = image.clone();
for (int i = 0; i < contours.size(); i++) {
Rect rect = boundingRect(contours[i]);
if (rect.contains(Point(image.cols / 2, image.rows / 2))) {
drawContours(result_image, contours, i, Scalar(0, 0, 255), 2);
}
}
```
这里使用了boundingRect函数来获取轮廓的矩形框,并判断中心点是否在矩形框内。如果在,则使用drawContours函数将该轮廓画出来。
完整代码如下:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat image = imread("your_image.jpg");
Mat gray_image;
cvtColor(image, gray_image, CV_BGR2GRAY);
Mat binary_image;
threshold(gray_image, binary_image, 100, 255, THRESH_BINARY);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary_image, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
Mat result_image = image.clone();
for (int i = 0; i < contours.size(); i++) {
Rect rect = boundingRect(contours[i]);
if (rect.contains(Point(image.cols / 2, image.rows / 2))) {
drawContours(result_image, contours, i, Scalar(0, 0, 255), 2);
}
}
imshow("Result", result_image);
waitKey(0);
return 0;
}
```
注意,为了方便查看结果,我使用了imshow和waitKey函数来显示图像。实际使用时可以根据需要进行调整。