findContours 边缘检测
时间: 2023-11-04 16:55:49 浏览: 53
findContours是OpenCV中的一个函数,用于在图像中查找边缘。它的基本思想是通过在图像中查找像素值的变化,找到图像中的所有连通区域。这些连通区域就是边缘。
findContours函数需要输入一个二值图像(即只包含黑色和白色两种颜色的图像),然后它会在这个图像中查找所有的边缘,并返回一个包含所有边缘的向量。
在使用findContours函数之前,通常需要对输入的图像进行一些预处理,例如使用Canny算法进行边缘检测,或使用阈值化函数将图像转换为二值图像。这些预处理步骤可以帮助findContours函数更准确地检测出边缘。
一旦找到了边缘,就可以使用drawContours函数将它们绘制到图像上,或者对它们进行进一步的处理,例如计算边缘的长度、面积或周长,或者使用它们进行图像分割、形状识别等任务。
相关问题
python边缘缺陷检测
边缘缺陷检测是指在图像处理中,通过检测图像的边缘来发现物体的缺陷或异常。根据引用中的描述,Python中可以使用Canny算子进行边缘检测。Canny算子是一种经典的边缘检测算法,它能够有效地提取图像中的边缘信息。
在边缘缺陷检测的流程中,首先需要对矫正后的图片进行高斯滤波,以去除一些噪声点。然后,使用Canny算子对滤波后的图片进行边缘检测。之所以要进行边缘检测是因为后续的轮廓检测需要使用Canny算子描述的图片作为参数。
接下来,可以使用卷积核为5×5的单位阵进行膨胀和闭操作,以进一步增强图像中的边缘信息。最后,可以使用cv2.findContours函数对处理后的图片进行轮廓检测,以发现图像中的缺陷。
根据引用中的实验结果,边缘缺陷检测方法在不同类型的图片上的正确率有所差异。在OK图片上的正确率为0.87,可能是受光照影响导致边缘差异变大,从而影响轮廓的检测。而在胶带缺陷上的正确率为0.80,可能是由于缺陷主要集中在产品中间的白色宽带上,轮廓的检测数量较少,未达到设定的阈值。而在大气泡缺陷的图片上的正确率为1.00,可能是由于大气泡缺陷形成了大量的离散块,使得检测到的轮廓数量容易超过阈值。
所以,通过使用Python中的边缘缺陷检测方法,可以在图像中发现并识别出边缘缺陷的存在。
findContours检测黑底白字轮廓代码
`findContours` 是 OpenCV(开源计算机视觉库)中的一个重要功能,用于从图像中提取边缘、轮廓等特征。对于检测黑底白字(即前景和背景颜色对比强烈)的轮廓,你可以使用以下步骤编写代码:
```cpp
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
int main() {
// 读取图片
cv::Mat image = cv::imread("input_image.jpg", cv::IMREAD_GRAYSCALE); // 假设是灰度图像
// 处理图像,通常会先进行二值化处理
cv::threshold(image, image, 128, 255, cv::THRESH_BINARY_INV); // 如果文字为白色,前景设置为255(白色),背景设置为0(黑色)
// 寻找轮廓,cv::RETR_EXTERNAL 只获取外轮廓,cv::CHAIN_APPROX_SIMPLE 提高性能
std::vector<std::vector<cv::Point>> contours;
cv::findContours(image, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// 现在 contours 数组里存储了轮廓点
for (const auto& contour : contours) {
// 可以对每个轮廓执行进一步操作,比如计算面积或绘制轮廓
cv::drawContours(image, contour, -1, cv::Scalar(0, 0, 255), 2); // 绘制轮廓,蓝色
}
// 显示结果
cv::imshow("Contours Detected", image);
cv::.waitKey(0);
cv::.destroyAllWindows();