BS版图形系统 - OpenCV - 第5章笔记

实战分享:用Python+OpenCV复现AOI图像处理全流程(含二值化/滤波代码) 本文通过Python和OpenCV实战演示了AOI(自动光学检测)图像处理的全流程。详细讲解了从工程化框架搭建、图像预处理(高斯滤波、CLAHE增强)、图像分割(二值化、自适应阈值)到特征提取(Sobel、Canny边缘检测)及模板匹配的完整代码实现,为工业视觉算法落地提供了可复用的解决方案。 阅读详情


** QQ: 282397369 **

5 自动光学检查、对象分割和检测

AOI:自动光学检查

5.1 技术要求

5.2 隔离场景中的对象

在这里插入图片描述
在这里插入图片描述

  • 预处理:
    • 噪声消除
    • 光消除
    • 二值化
  • 分割:
    • 轮廓检测
    • 连通组件提取(标签)
      在这里插入图片描述

5.3 为AOI创建应用程序

输入参数:

  • 要处理的输入图像
  • 光图像模式
  • 光操作,用户可以选择减法或除法运算
    • 值0,采用减法操作
    • 值1,采用除法操作
  • 分割:在有无统计信息的情况下连通组件之间进行选择,并找到画轮廓线的方法

5.4 预处理输入图像

最大程度减少由于相机镜头引起的图像噪声、光线条件与图像变形

5.4.1 噪声消除

  • 高斯噪声、尖峰噪声、散粒噪声
  • 椒盐噪声:
    在这里插入图片描述
    • 中值滤波器常用于去除椒盐噪声,以丢失小的细节
      在这里插入图片描述
    • 盒式滤波器或高斯滤波器,噪声不会被消除,但会变得平滑,对象细节也会丢失和变平滑
      在这里插入图片描述
  • 中值滤波器:medianBlur(img, img_noise, 3)

5.4.2 用光模式移除背景进行分割

  • 基本阈值,伪影有很多白噪声
    在这里插入图片描述
  • 期望的背景移除和阈值处理结果
    在这里插入图片描述
    • 做法:准备一张没有任何对象的场景图片,然后采用减法或除法操作
      在这里插入图片描述
    • 减法:R = L - I
    • 除法:R = 255 * (1 - (I / L))
Mat removeLight(Mat img, Mat pattern, int method)
{
	Mat aux;
	// if method is normalization
	if(method==1)
	{
		// Require change our image to 32 float for division
		Mat img32, pattern32;
		img.convertTo(img32, CV_32F);
		pattern.convertTo(pattern32, CV_32F);
		// Divide the imabe by the pattern
		aux= 1-(img32/pattern32);
		// Convert 8 bits format
		aux.convertTo(aux, CV_8U, 255);
	}else{
		aux= pattern-img;
	}
	//equalizeHist( aux, aux );
	return aux;
}

在这里插入图片描述

  • 创建光/背景模式:使用过滤器,应用于输入图像的大内核尺寸的模糊技术
Mat calculateLightPattern(Mat img)
{
	Mat pattern;
	// Basic and effective way to calculate the light pattern from one image
	blur(img, pattern, Size(img.cols/3,img.cols/3));
	return pattern;
}

5.4.3 阈值

	Mat img_thr;
	if(method_light!=2){
		threshold(img_no_light, img_thr, 30, 255, THRESH_BINARY);
	}else{
		threshold(img_no_light, img_thr, 140, 255, THRESH_BINARY_INV);
	}

5.5 分割输入图像

两种技术:连通组件、查找轮廓
ROI:感兴趣区域

5.5.1 连通组件算法

  • connectedComponents
void ConnectedComponents(Mat img)
{
	// Use connected components to divide our possibles parts of images 
	Mat labels;
	auto num_objects= connectedComponents(img, labels);
	// Check the number of objects detected
	if(num_objects < 2 ){
		cout << "No objects detected" << endl;
		return;
	}else{
		cout << "Number of objects detected: " << num_objects - 1 << endl;
	}
	// Create output image coloring the objects
	Mat output= Mat::zeros(img.rows,img.cols, CV_8UC3);
	RNG rng( 0xFFFFFFFF );
	for(auto i=1; i<num_objects; i++){
		Mat mask= labels==i;
		output.setTo(randomColor(rng), mask);
	}
	//imshow("Result", output);
	miw->addImage("Result", output);
}

在这里插入图片描述

  • Stats算法
void ConnectedComponentsStats(Mat img)
{
	// Use connected components with stats
	Mat labels, stats, centroids;
	auto num_objects= connectedComponentsWithStats(img, labels, stats, centroids);
	// Check the number of objects detected
	if(num_objects < 2 ){
		cout << "No objects detected" << endl;
		return;
	}else{
		cout << "Number of objects detected: " << num_objects - 1 << endl;
	}
	// Create output image coloring the objects and show area
	Mat output= Mat::zeros(img.rows,img.cols, CV_8UC3);
	RNG rng( 0xFFFFFFFF );
	for(auto i=1; i<num_objects; i++){
		cout << "Object "<< i << " with pos: " << centroids.at<Point2d>(i) << " with area " << stats.at<int>(i, CC_STAT_AREA) << endl;
		Mat mask= labels==i;
		output.setTo(randomColor(rng), mask);
		// draw text with area
		stringstream ss;
		ss << "area: " << stats.at<int>(i, CC_STAT_AREA);

		putText(output, 
				ss.str(), 
				centroids.at<Point2d>(i), 
				FONT_HERSHEY_SIMPLEX, 
				0.4, 
				Scalar(255,255,255));
	}
	imshow("Result", output);
	miw->addImage("Result", output);
}

在这里插入图片描述

5.5.2 findContours算法

  • 参数:
    • Image: 灰度输入图像
    • Contours: 轮廓输出,其中每个检测到的轮廓点是点的向量
    • Hierarchy:可选的输出向量,用于保存轮廓的层次结构
    • Mode: 检索轮廓的模式
    • Method:用近似方法来检索轮廓的形状
    • Offset:移动所有轮廓的可选点值
      输入图像会被findContours函数修改
      drawContours
      在这里插入图片描述

5.6 总结

在这里插入图片描述

实战分享:用Python+OpenCV复现AOI核心算法(附图像预处理代码) 本文详细解析了如何利用Python+OpenCV实现自动光学检测(AOI)核心算法,涵盖图像预处理、缺陷特征提取及混合架构设计。通过实战案例演示,帮助开发者掌握工业视觉检测技术,提升PCB板检测效率与精度。 阅读详情

相关推荐

大恒MER-030工业相机+linux+opencv+clion-简易开发:让视频小窗跑出来

大恒工业相机usb2.0简易开发(一)前言clion配置主函数代码CTimeCounter.h 前言 由于官方的sdk里的sample并没有详细写结合opencv开发的一些内容,在此做下入门记录,目标是在clion环境下,实时输出视频小窗。 另外,在使用过程中,发现GxRegisterCaptureCallback(注册回调函数)和GxUnregisterCaptureCallback(注销回调函数)不能用,不知道为什么,待解决,在之后的代码中我是用GxGetImage来写的 最终效果: clion配置

weixin_43864015的博客 1577

OpenCV应用项目——零部件的自动光学检测

多窗口展示背景去除连通图的实现轮廓边缘检测并且在实际的C++代码中,还涉及了智能指针等高阶知识;工业质检项目作为视觉领域较为成熟的落地项目,其大部分都是基于深度学习的方式实现了,但如果能掌握一些OpenCV的方法,也可以在项目中起到优化效果的作用;

实力派,无需多言! 1408

pcb-aoi:基于 OpenCV 的自动化光学 PCB 检测

印刷电路板 - 自动光学检测 目标 该软件旨在帮助您确定组装好的印刷电路板的问题。 您提供“好” PCB的参考图像,然后软件应分析其他板并识别差异(错误的组件,放置/方向错误,焊桥等)。 目前的发展状况 第一个基于基准的PCB展开原型,目前尚无其他功能。 要求 python 包:numpy、opencv-python 用法 python3 python/pcb_processing.py test_images/SKL8517-2-REWORKED-TOP2.tif

FAQ:SpringBoot不能自动注入RestTemplate问题解决

出现错误 Consider defining a bean of type 'org.springframework.web.client.RestTemplate' in your configuration. No qualifying bean of type [org.springframework.web.client.RestTemplate] found 原因: Spring Boot<=1.3 无需定义,Spring Boot自动为您定义了一个。 ..

lixinkuan的博客 1万+

AOI图像处理

利用VS2010和Opencv开发AOI测试技术,内容包括视频图像识别没处理旋转放大缩小以及其他处理,图像比较,Logo比较。

BS框架的搭建DEMO

用javascript实现动态界面登录和主页框架展示。

基于OPENCV和图像减法的PCB缺陷检测

在PCB制造业中,生产的一个最重要方面是质量检查。PCB板经历了从面板切割到层压的大量生产过程,一块板上的一个缺陷将使整个板过时。随着电子电器需求的日益增长,对更高质量元器件的需求也在不断增长。由于商用AOI价格高昂,许多制造商无法进行自动检测。在这方面,计算机视觉可以为商业AOI提供一种替代方案,以帮助小型制造商进行自动检测。图像减法和斑点检测使用户能够轻松地发现PCB中......

charles_zhang_的博客 5524

浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)

主要介绍了浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

基于OpenCVSharp4,实现图片绘制矩形AOI

初学研究出来,写的肯定不是很完美. 代码如下:

F_soar的博客 422

UE5入门第二周总结:基于蓝图的国际象棋的实现

在C++的学习中,这是一个入门级别的项目。我们的目标是灵活运用蓝图的特性和强大的可视化功能,做出这一入门级项目的同时,思考如何优化并改进算法,并尽可能的用面向对象的方法实现,用蓝图中的继承和多态简化编码过程。

YoungeYang的博客 1259

微信开放标签wx-open-launch-app样式失效?手把手教你正确设置点击区域(附完整代码)

本文详细解析了微信开放标签`wx-open-launch-app`样式失效和点击无响应的常见问题,提供了完整的解决方案和代码示例。通过分析标签内部实现机制,指导开发者正确设置点击区域和样式,确保跨平台兼容性和用户体验优化。

joy55的博客 320

BS版图形系统 - OpenCV - 第1章笔记

BS版图形系统 - OpenCV - 第1章笔记1 OpenCV入门1.1 了解人类视觉系统1.2 人类如何理解图像内容1.3 能用OpenCV做什么1.3.1 内置数据结构和输入/输出1.3.2 图像处理操作1.3.3 GUI1.3.4 视频分析1.3.5 3D重建1.3.6 特征提取1.3.7 对象检测1.3.8 机器学习1.3.9 计算摄影1.3.10 形状分析1.3.11 光流算法1.3.12 人脸和对象识别1.3.13 表面匹配1.3.14 文本检测和识别1.3.15 深度学习1.4 安装Open

drgraph的博客 390

嵌入式开发避坑指南:用DWT做延时函数,这几个细节不注意代码会跑飞

本文深入探讨了在Cortex-M嵌入式开发中使用DWT实现精确延时函数的关键技巧与常见陷阱。针对DWT_CYCCNT计数器应用中的内核兼容性、溢出处理、编译器优化等五大核心问题,提供了工业级稳健解决方案,帮助开发者避免代码跑飞风险,实现微秒级高精度延时控制。

weixin_42653691的博客 158

BS版图形系统 - OpenCV - 第6章笔记

BS版图形系统 - OpenCV - 第6章笔记6. 学习对象分类6.1 技术要求6.2 机器学习概念介绍OpenCV机器学习算法 QQ: 282397369 6. 学习对象分类 对每个分离的对象进行分类 训练系统,以便能够学习必需的参数,从而决定将哪个特定标签分配给检测到的对象 机器学习的基本概念,以便对具有不同标签的图像进行分类 6.1 技术要求 6.2 机器学习概念介绍 机器学习:计算机无须明确编程就能够开展学习的能力 机器学习涉及到人工智能中的模式识别和学习理论,并且与计算统计学有关 应用:OCR、

drgraph的博客 404

三极管共集电极放大电路详解:射极跟随器的原理、计算与应用

三极管放大电路是模拟电子技术的基石,常见组态包括共发射极、共基极和共集电极。其中共集电极电路因输入电阻大、输出电阻小、电压增益接近1的特性,常被用作射极跟随器,在信号缓冲、级间隔离和低阻抗负载驱动等场景中发挥关键作用。其核心价值并非电压放大,而是完成阻抗变换,将高内阻信号源转换为低内阻输出,同时保持信号幅值基本不变。理解其静态工作点计算与动态参数推导(如电压增益、输入输出电阻)是设计实用电路的前提。本文结合12V电源下的具体设计实例和仿真验证,梳理了从电路识别、参数计算到工程实践的完整流程,并指出常见设计误

weixin_29193259的博客 367

异步复位同步释放:如何确保复位信号的可靠性与时序安全

本文深入探讨了异步复位同步释放技术在数字电路设计中的关键作用,详细分析了复位信号的可靠性与时序安全问题。通过对比异步复位与同步复位的本质区别,揭示异步复位的优势与潜在风险,并提供了标准的Verilog实现方案。文章还涵盖了多时钟域下的复位同步策略、复位网络时序约束方法以及实际工程中的经验教训,为数字系统设计者提供了全面的复位信号处理指南。

weixin_29213655的博客 399

BS版图形系统 - OpenCV - 第4章笔记

BS版图形系统 - OpenCV - 第4章笔记4 深入研究直方图和滤波器4.1 技术要求4.2 生成CMake脚本文件4.3 创建图形用户界面4.4 绘制直方图4.5 图像颜色均衡4.6 Lomography效果4.7 卡通效果4.8 总结 QQ: 282397369 4 深入研究直方图和滤波器 4.1 技术要求 4.2 生成CMake脚本文件 4.3 创建图形用户界面 Show histogram Equalize histogram Lomography effect Cartoonize effe

drgraph的博客 220

Python爬虫实战:5分钟搞定大众点评评论数据抓取(附完整代码)

本文详细介绍了使用Python爬虫高效获取大众点评评论数据的5个关键技巧,包括环境配置、智能页面解析、反反爬策略、数据存储与容错设计以及性能优化。通过实战案例和完整代码,帮助开发者快速掌握文本挖掘技术,适用于市场分析和商业决策。

weixin_30660027的博客 290

BS版图形系统 - OpenCV - 第3章笔记

BS版图形系统 - OpenCV - 第3章笔记3 学习图形用户界面3.1 技术要求3.2 OpenCV用户界面介绍3.3 OpenCV的基本图形用户界面3.4 QT图形用户界面3.5 OpenGL支持3.6 总结 QQ 282397369 3 学习图形用户界面 显示图像结果,处理用户与图像的交互。 3.1 技术要求 3.2 OpenCV用户界面介绍 基于原生用户界面的基本界面: GTK 基于QT库的略微更高级的界面 3.3 OpenCV的基本图形用户界面 highgui模块 #include &

drgraph的博客 170

华为OD机试 - 字符串筛选排序 - 数组(Python/JS/C/C++ 双机位C卷 100分)

k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引,如果第k个最小ASCII码值的字母存在重复 则输出该字母的最小位置索引。输入一个由N个大小写字母组成的字符串,按照ASCII码值从小到大进行排序,查找字符串中第K个最小ASCII码值的字母(k>=1)。k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引,如果有重复字母则输出字母的最小位置索引。输出字符串中第k个最小ASCII码值的字母所在字符串的位置索引。第二行输入k ,k必须大于0 ,k可以大于输入字符串的长度。

学Java,找哪吒 1391

当AI写小说——一个被严重低估的工程化战场

摘要 AI小说创作远非简单的prompt生成,而是一项需要系统化工程管理的复杂任务。本文通过真实案例分析,揭示了当前AI写小说存在的五大核心难题:设定一致性难以维持、文风控制缺乏个性、爽感节奏难以把握、长篇记忆能力有限以及平台规则适配困难。研究显示,90%的失败案例源于错误的创作方法,主要表现为对话框式随机生成和模板式同质化创作。要实现高质量的AI小说创作,必须建立包括设定治理、记忆管理、文风校准等在内的全链路工程化体系,而非依赖单一prompt指令。只有采用系统化的人机协同方法,才能突破当前AI创作的质量

sellyogurt的博客 680

BS版图形系统 - OpenCV - 第2章笔记

BS版图形系统 - OpenCV - 第2章笔记2 OpenCV基础知识导论2.1 技术要求2.2 基本CMake配置文件2.3 创建一个库2.4 管理依赖项2.5 让脚本更复杂2.6 图像和矩阵2.7 读/写图像2.8 读取视频和摄像头2.9 其他基本对象类型VecScalarPointSizeRectRotatedRect2.10 基本矩阵运算2.11 基本数据存储2.12 总结 QQ 282397369 2 OpenCV基础知识导论 2.1 技术要求 2.2 基本CMake配置文件 2.3 创建一个库

drgraph的博客 191

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

基于C++的OpenCV项目实战——零部件的自动光学检测

多窗口展示背景去除连通图的实现轮廓边缘检测并且在实际的C++代码中,还涉及了智能指针等高阶知识;工业质检项目作为视觉领域较为成熟的落地项目,其大部分都是基于深度学习的方式实现了,但如果能掌握一些OpenCV的方法,也可以在项目中起到优化效果的作用;

weixin_40620310的博客 4117

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

灰值图像孔洞填充 原理_【显微视界】AOI光学自动检测技术 | 基本原理与设备构成...

今日光电 有人说,20世纪是电的世纪,21世纪是光的世纪;知光解电,再小的个体都可以被赋能。欢迎来到今日光电!----与智者为伍 为创新赋能----一,引言:AOI(automatically optical inspection)是光学自动检测,顾名思义是通过光学系统成像实现自动检测的一种手段,是众多自动图像传感检测技术中的一种检测技术,核心技术点如何获得准确且高质量的光学...

weixin_39756445的博客 1105

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

基于OpenCV实现海岸线变化检测

点击上方“3D视觉工坊”,选择“星标”干货第一时间送达介绍海岸是一个动态系统,其中因侵蚀现象导致的海岸线后退、或是由众多因素如气象,地质,生物和人类活动所导致线前进的是常见现象。在海洋磨...

3D视觉工坊 3091

图像分割

用光模式移除背景进行分割 方法一:R = L - I 方法二:R = 255*( 1 - (I/L) ) 光模式L :没有对象,只有背景 图像I 结果 R Mat removeLight(Mat img, Mat pattern, int method) { Mat aux; // if method is normalization if(method == 1) { // Reequire change out image to 32 float for divison Mat

qq_35912930的博客 178
上一篇: BS版图形系统 - Ribbon工具栏初步
下一篇: BS版图形系统 - Ribbon Gallery
DrGraph
博客等级 码龄14年 228粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值