用OpenCV写一个简单的尺寸检测程序

工业生产离不开检测,用到机器视觉常见的检测有外观检测、尺寸检测、缺陷检测、检测结果判读等。外观检测、尺寸检测、缺陷检测等可以直接通过工业相机获取图像,让后进行必要的图像处理,提取检测目标及其信息进行分析判断并输出结果,这个可以连续在线作业,这种检测方式很常见。检测结果判读,是用电脑代替人工分析检测设备所获得的图片,并输入结果,如金相分析,光谱分析等。

说到机器视觉就离不开光源与相机(或摄像机)。相机与镜头是获得图片不可确少的设备;合适分辨率的相机,及适配的镜头是获得精准图像的前提。而适当的光照条件则是获得高品质图像必须条件。即便有了这两个条件,得到的图像也还是存在一定的失真,要得到准确的检测结果,相机矫正也是很重要的。这里不去讨论如何去选相机、光源、如何标定矫正相机。只简单演示如何通过一张实现图片位置检测。

下面图片是LM339的图片:

如果要检测该IC Soldering Tails的中心位置,将怎么做呢?下面通过OpenCV编程来实现Soldering Tails的中心位置检测。

新建一个控制台应用程序,在源程序中加入,如下代码:

复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    Mat src = imread("1.png");
	if (src.empty())
	{
		cout << "Cann't Open Image!" << endl;
		return -1;
	}
	imshow("Src", src);

	Mat dst, dst1;
	vector<vector<Point>> conturs;
	vector<Rect> rects;
	vector<Vec4i> hierarchy;

	cvtColor(src, dst, COLOR_BGR2GRAY);
	
	threshold(dst, dst1, 200, 250, THRESH_BINARY);
	GaussianBlur(dst1, dst1, Size(5, 5),0);
	findContours(dst1, conturs, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
	 
	int size = conturs.size();
	for (size_t i = 0; i < size; i++)
	{
		Rect rect = boundingRect(conturs[i]);
		if ((rect.area() > 100 && rect.tl().y < 100) || (rect.area() > 100 && rect.tl().y > 500))
		{
			rectangle(src, rect, Scalar(0, 0, 255), 2);
			rects.push_back(rect);
		}
	}

	String str;
	char str1[20];
	size = rects.size();
	for (size_t i = 0; i < size; i++)
	{
		memset(str1, 0, strlen(str1));
		str.clear();
		sprintf_s(str1, "(%d, %d)", rects[i].tl().x + rects[i].width/2, rects[i].tl().y + rects[i].height / 2);
		str.append(str1);
		if (rects[i].tl().y < 100)
			putText(src, str, Point(rects[i].tl().x, rects[i].tl().y - 20), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 0, 0), 1);
		else
			putText(src, str, Point(rects[i].tl().x, rects[i].tl().y + 50), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 0, 0), 1);
	}

	imshow("Dst1", src);

	waitKey(0);
	return 0;
}

试运行结果,如下:

可以看出,已经检测处所有Soldering Tail的中心坐标,结果是以像素为单位,因未做标定,结果不是长度单位。如果设定好基准与位置允许公差,就可以实现自动判定是否存在位置超差的Pin,从而实现自动检测。

如果要实现自动挑出不良品,还得完成通信接口编程,将检测结果输出到PLC等执行控制机构,让其执行排除不良品的动作。

这只是一个简单的开头,如果有空闲时间,将在后面的博文中将逐步介绍机器更多视觉的实际案例,编程工具软件也不局限于VS与OpenCV,halcon、QT、Python等可能都会涉及也会包含部分硬件配置等方面的内容。

本示例基于OpenCV4.90及VS2022,示例的Project已打包上传到CSDN,下载链接为:https://download.csdn.net/download/billliu66/89894190

相关推荐
一切皆是因缘际会4 小时前
从概率拟合到内生心智:2026 下一代 AI 架构演进与落地实践
人工智能·深度学习·算法·架构
科研前沿4 小时前
镜像视界 CameraGraph™+多智能体:构建自感知自决策的全域空间认知网络技术方案
大数据·运维·人工智能·数码相机·计算机视觉
爱学习的张大5 小时前
具身智能论文问答(2):Diffusion Policy
人工智能
AI科技星5 小时前
全域数学·72分册·射影原本 无穷维射影几何卷细化子目录【乖乖数学】
人工智能·线性代数·算法·机器学习·数学建模·数据挖掘·量子计算
Chef_Chen5 小时前
论文解读:MemOS首次把记忆变成大模型的一等公民资源,Scaling Law迎来第三条曲线
人工智能·agent·memory
风落无尘5 小时前
《智能重生:从垃圾堆到AI工程师》——第四章 变化的艺术
人工智能·线性代数·算法
发哥来了5 小时前
AI视频生成模型选型指南:五大核心维度对比评测
大数据·人工智能·机器学习·ai·aigc
发哥来了5 小时前
AI驱动生产线的实际落地:一个东莞厂商的技术选型实录
大数据·人工智能·机器学习·ai·aigc
AC赳赳老秦5 小时前
知识产权辅助:用 OpenClaw 批量生成专利交底书 / 软著申请材料,自动校验格式与内容合规性
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
AI科技5 小时前
原因大揭秘:为什么别人的编曲伴奏做得又快又好,2026年度甄选5款AI编曲软件汇总
人工智能