C++和opencv实现对除了边界5个像素后的图像进行目标面积在大于50个像素的目标找出轮廓并且红色圈出代码
以下是使用C++和OpenCV实现对除了边界5个像素后的图像进行目标面积在大于50个像素的目标找出轮廓并且红色圈出的代码:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("image.jpg");
Mat gray, edge;
cvtColor(img, gray, COLOR_BGR2GRAY);
Canny(gray, edge, 100, 200);
std::vector<std::vector<Point>> contours;
std::vector<Vec4i> hierarchy;
findContours(edge, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
for (size_t i = 0; i < contours.size(); i++)
{
double area = contourArea(contours[i]);
if (area > 50)
{
Rect rect = boundingRect(contours[i]);
rectangle(img, rect, Scalar(0, 0, 255), 2);
}
}
imshow("Result", img);
waitKey(0);
return 0;
}
该代码首先读取图像并将其转换为灰度图像,然后使用Canny边缘检测算法生成边缘图像。接下来,使用findContours函数查找轮廓,并使用contourArea函数计算每个轮廓的面积。如果面积大于50,则使用boundingRect函数获取轮廓的边界框,并使用rectangle函数在图像上绘制红色矩形。最后,使用imshow函数显示结果图像,并使用waitKey函数等待用户按下任意键
原文地址: https://www.cveoy.top/t/topic/cnCJ 著作权归作者所有。请勿转载和采集!