如何使用c++和opencv筛选出图像中的矩形区域,并给出代码
时间: 2024-05-12 13:16:26 浏览: 192
openCV提取图像中的矩形区域
以下是一个使用C++和OpenCV的示例代码,可以用于筛选出图像中的矩形区域:
```
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat src = imread(argv[1], IMREAD_COLOR);
if (src.empty())
{
cerr << "Failed to open image file!" << endl;
return -1;
}
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
Mat blur;
GaussianBlur(gray, blur, Size(5, 5), 0, 0);
Mat threshold;
adaptiveThreshold(blur, threshold, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY_INV, 11, 2);
Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
morphologyEx(threshold, threshold, MORPH_OPEN, element);
vector<vector<Point>> contours;
findContours(threshold, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
vector<Rect> rects;
for (size_t i = 0; i < contours.size(); i++)
{
Rect rect = boundingRect(contours[i]);
if (rect.width > 50 && rect.height > 50)
{
rects.push_back(rect);
}
}
for (size_t i = 0; i < rects.size(); i++)
{
rectangle(src, rects[i], Scalar(0, 255, 0), 2);
}
namedWindow("Result");
imshow("Result", src);
waitKey();
return 0;
}
```
该程序首先读取一张图像,并将其转换为灰度图像。接着,使用高斯滤波和自适应阈值处理图像,以便更好地检测轮廓。然后,对二值图像进行形态学开运算(morphologyEx函数),以移除一些小的噪点和断裂的边缘。最后,使用findContours函数和boundingRect函数找到所有的矩形,并筛选出大于50 x 50像素的矩形。最后,它会将所有符合条件的矩形用绿色框出,并将结果显示在窗口中。
需要注意的是,该程序只能处理较为简单的图像,可能需要根据实际应用的需要进行修改和优化。
阅读全文