IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> C++ OpenCV实践:检测电路线问题 -> 正文阅读

[人工智能]C++ OpenCV实践:检测电路线问题


前言

最近在网上偶然看到Halcon检测电路连线问题,感觉挺有意思,本人打算用Opencv来实现下,说做就做。


1. 检测步骤

这里主要使用了形态学开闭操作绝对差值进行检测,然后使用轮廓查找与过滤的方法来确定最终检测结果,很简单吧,但是参数设置是个大问题,本人尝试了很多次,才达到比较好的效果,而且通用性感觉不是很好。

2. C++实现

#include <iostream>
#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_broken.png";
	Mat mSrc = imread(strImgFile);
	CV_Assert(!mSrc.empty());

	Mat mGray;
	cvtColor(mSrc, mGray, COLOR_BGR2GRAY);
	CV_Assert(!mGray.empty());

	imshow("gray", mGray);

	Mat mThresh;
	threshold(mGray, mThresh, 0, 255, THRESH_BINARY | THRESH_OTSU);
	CV_Assert(!mThresh.empty());

	imshow("thresh", mThresh);

	Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));

	Mat mOpen;
	morphologyEx(mThresh, mOpen, MORPH_OPEN, kernel);
	CV_Assert(!mOpen.empty());

	imshow("open", mOpen);

	Mat mClose;
	morphologyEx(mThresh, mClose, MORPH_CLOSE, kernel);
	CV_Assert(!mClose.empty());

	imshow("close", mClose);

	Mat mDiff;
	absdiff(mOpen, mClose, mDiff);
	CV_Assert(!mDiff.empty());
	imshow("diff", mDiff);

	Mat mSrcCopy = mSrc.clone();
	std::vector<std::vector<Point>> contours;
	findContours(mDiff, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE);
	for (int i = 0; i < contours.size(); i++)
	{
		Point2f center;
		
		double area =  contourArea(contours[i]);
		RotatedRect rr = minAreaRect(contours[i]);
		Rect rect = rr.boundingRect();
		int max = rect.width > rect.height ? rect.width : rect.height;
		int min = rect.width > rect.height ? rect.height : rect.width;
		if (  max/min < 5 && min > 2)
		{
			drawContours(mSrcCopy, contours, i, Scalar(0, 0, 255), -1); 
		}
	}

	imshow("filter", mSrcCopy);

	waitKey(0);
	destroyAllWindows();

	system("pause");
	return 0;
}

3. 结果展示

原图:
请添加图片描述
Opencv检测结果:
在这里插入图片描述
Halcon检测结果:
在这里插入图片描述


总结

通过对比发现,确实Halcon的结果好像比本人实现的要好一些,也可能是本人方法不好,请大佬指教。

参考

https://blog.csdn.net/qq_43864807/article/details/109100336

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:14:10  更:2021-10-06 12:14:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:37:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码