前言
最近在51Halcon中看到一条有意思的求助帖子,有热心朋友给出了Halcon的解决方法,这里给出C++ OpenCV的解决方法。
1. 检测步骤
Halcon实现(引用https://www.51halcon.com/thread-1173-1-2.html):
看到检测图像以及想要检测的目标(绿色实线闭合区域),我们知道,要检测的区域的区分度不高,这里给出个人实现思路:检测区域位于圆形的中心,而圆形中心区域亮度比周边要高,我们可以先分割出中心亮度高的区域,然后在这一分割出的区域进行检测目标,提取出目标轮廓。
2. C++ OpenCV实现
#include <opencv2\imgcodecs.hpp>
#include <opencv2\core.hpp>
#include <opencv2\imgproc.hpp>
#include <opencv2\highgui.hpp>
#include <vector>
using namespace cv;
int main()
{
std::string strImgFile = "C:\\Temp\\common\\Workspace\\Opencv\\images\\detect_defect_with_complex_background.bmp";
Mat mSrc = imread(strImgFile);
CV_Assert(!mSrc.empty());
Mat mGray;
cvtColor(mSrc, mGray, COLOR_BGR2GRAY);
CV_Assert(!mGray.empty());
Mat mThresh;
threshold(mGray, mThresh, 0, 255, THRESH_BINARY | THRESH_OTSU)<