文章目录
前言
今天在51Halcon网站答疑区看到划痕检测的求助,觉得挺有意思,就用OpenCV实现了下,这里分享给大家。
问题链接:https://www.51halcon.com/thread-941-1-1.html
1. 检测步骤
先上原图:
这个问题就是检测上图环上右上角大约45度的一个划痕或者缝隙。
本人实现检测主要步骤:
- 图片缩小1倍(图片太大了,OpenCV显示窗口显示不全)
- 图像灰度化;
- 高斯模糊去除噪声影响;
- 对图像做均值化处理,将划痕覆盖;
- 均值前后图像差值处理,得到包含划痕的灰度图;
- 二值化处理
- 提取前景轮廓,分析划痕几何特性,筛选划痕轮廓;
- 绘制满足条件的划痕轮廓。
2. C++ OpenCV实现
#include <iostream>
#include <opencv2\imgcodecs.hpp>
#include <opencv2\core.hpp>
#include <opencv2\imgproc.hpp>
#include <opencv2\highgui.hpp>
using namespace cv;
int main()
{
std::string strImgFile = "C:\\Temp\\common\\Workspace\\Opencv\\images\\crack_with_complex_bg.bmp";
Mat mSrc = imread(strImgFile);
CV_Assert