C++ OpenCV教程: 在图像轮廓上标记缺陷
C++ OpenCV教程: 在图像轮廓上标记缺陷
本教程将演示如何使用C++和OpenCV库在图像轮廓上添加'缺陷'标签。这在计算机视觉应用中非常有用,例如产品缺陷检测。
代码示例
以下是完整的C++代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 加载图像
Mat image = imread('input.jpg');
// 将图像转换为灰度图像
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
// 使用Canny边缘检测算法检测边缘
Mat edges;
Canny(gray, edges, 50, 150);
// 找到轮廓
vector<vector<Point>> contours;
findContours(edges, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 在轮廓上打上标签
for (int i = 0; i < contours.size(); i++)
{
// 计算轮廓的面积
double area = contourArea(contours[i]);
// 如果面积小于1000,则认为是缺陷
if (area < 1000)
{
// 在轮廓上打上'缺陷'标签
Rect rect = boundingRect(contours[i]);
putText(image, 'Defect', Point(rect.x, rect.y - 5), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 255), 2);
}
}
// 显示结果
imshow('Result', image);
waitKey(0);
return 0;
}
代码解释
- 加载必要的库: 首先,我们包含了必要的OpenCV头文件。
- 加载图像: 使用
imread函数加载输入图像。 - 转换为灰度: 将彩色图像转换为灰度图像。
- 边缘检测: 使用Canny边缘检测器检测图像中的边缘。
- 查找轮廓:
findContours函数用于查找检测到的边缘的轮廓。 - 迭代轮廓: 循环遍历每个检测到的轮廓。
- 计算面积: 计算每个轮廓的面积。
- 标记缺陷: 如果轮廓面积小于预定义的阈值(此处为1000),则使用
putText函数在该轮廓附近添加“缺陷”标签。 - 显示结果: 最后,显示结果图像。
总结
本教程介绍了如何使用C++和OpenCV在图像轮廓上标记缺陷。您可以修改此代码以适应您的特定需求,例如更改缺陷面积阈值或标签文本。
希望本教程对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/jRcI 著作权归作者所有。请勿转载和采集!