c++ opencv 检测图像中 是否存在黑色区域,如果存在圈出来
时间: 2024-03-02 13:53:39 浏览: 113
使用Python-OpenCV消除图像中孤立的小区域操作
5星 · 资源好评率100%
可以通过 OpenCV 库的 threshold 函数将图像二值化,然后通过 findContours 函数找到黑色区域的轮廓,最后使用 drawContours 函数将轮廓圈出来。具体实现方式如下:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("image.jpg");
Mat gray, binary, dst;
cvtColor(img, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU); // 将图像二值化
std::vector<std::vector<Point>> contours;
std::vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE); // 查找轮廓
dst = img.clone();
for (size_t i = 0; i < contours.size(); i++)
{
double area = contourArea(contours[i]); // 计算轮廓面积
if (area > 100) // 如果轮廓面积过小,可能是噪声,忽略
{
drawContours(dst, contours, static_cast<int>(i), Scalar(0, 0, 255), 2); // 将轮廓圈出来
}
}
namedWindow("image", WINDOW_NORMAL);
imshow("image", dst);
waitKey(0);
return 0;
}
```
在上述代码中,首先通过 cvtColor 函数将图像转为灰度图像,然后使用 threshold 函数将图像二值化,使用 findContours 函数找到黑色区域的轮廓,最后使用 drawContours 函数将轮廓圈出来。需要注意的是,通过调整轮廓面积阈值可以控制是否将小的黑色区域忽略。
阅读全文