常州机器视觉培训

常州上位机软件开发

常州工业机器人编程设计培训

常州PLC培训

常州PLC

常州PLC编程培训

常州电工培训

常州和讯plc培训中心欢迎您!
热门课程
联系方式
  • 常州和讯自动化培训中心
  • 常州市新北区府琛商务广场2号楼1409室
  • 电话:0519-85602926
  • 手机:15861139266 13401342299
当前位置:网站首页 > 新闻中心 新闻中心
Opencv实现PCB印刷缺陷检测-常州上位机学习,常州机器视觉学习
日期:2024-3-28 14:12:47人气:  标签:常州上位机学习 常州机器视觉学习

摘要

本篇来用OpenCV实现Halcon中一个简单的PCB印刷缺陷检测实例。Halcon中对应的例子为pcb_inspection.hdev。并自定义一个正八边形结构元素进行开运算,闭运算,然后做差将缺陷标记显示。


原图如下:

1711416462.png

Halcon代码比较简单,这里也贴出来,短短13行:


read_image (Image, 'pcb')

dev_close_window ()

get_image_size (Image, Width, Height)

dev_open_window (0, 0, Width, Height, 'black', WindowHandle)

dev_display (Image)

* detect defects ...

gray_opening_shape (Image, ImageOpening, 7, 7, 'octagon')

gray_closing_shape (Image, ImageClosing, 7, 7, 'octagon')

dyn_threshold (ImageOpening, ImageClosing, RegionDynThresh, 75, 'not_equal')

dev_display (Image)

dev_set_color ('red')

dev_set_draw ('margin')

dev_display (RegionDynThresh)

opencv实现:


 (一)自定义正八边形结构元素


    Mat gray,src_open,src_close,dst;

    Mat src = imread("D:/opencv练习图片/pcb缺陷检测.png");

    imshow("原图", src);

    cvtColor(src, gray, COLOR_RGB2GRAY);

    Mat kernel = Mat::ones(Size(7, 7), CV_8UC1);

    kernel.at(0, 0) = 0;

    kernel.at(0, 1) = 0;

    kernel.at(0, 5) = 0;

    kernel.at(0, 6) = 0;

    kernel.at(1, 0) = 0;

    kernel.at(1, 6) = 0;

    kernel.at(5, 0) = 0;

    kernel.at(5, 6) = 0;

    kernel.at(6, 0) = 0;

    kernel.at(6, 1) = 0;

    kernel.at(6, 5) = 0;

    kernel.at(6, 6) = 0;

    cout << kernel << endl;


 这里对矩阵的分别赋值,其实有一个填充函数fillPloy()(只需输入顶点坐标即可)


 (二)对图像开运算,闭运算,做差


    morphologyEx(gray, src_open, MORPH_OPEN, kernel);

    imshow("开运算", src_open);

    morphologyEx(gray, src_close, MORPH_CLOSE, kernel);

    imshow("闭运算", src_close);

    absdiff(src_open, src_close, dst);

    imshow("做差", dst);

 开运算:                                                                                                                                   


 闭运算:


 二者做差:


 可以看到,白色的点就是缺陷的位置。


 (三)二值化,寻找轮廓,显示


    threshold(dst, dst, 80, 255, THRESH_BINARY);

    vector<vector>contours;

    findContours(dst, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point());

    drawContours(src, contours, -1, Scalar(0, 0, 255), 2, 8);

    imshow("显示缺陷", src);


本文网址:
下一篇:没有资料

相关信息:
版权所有 CopyRight 2006-2017 江苏和讯自动化设备有限公司 常州自动化培训中心 电话:0519-85602926 地址:常州市新北区府琛商务广场2号楼1409室
苏ICP备14016686号-2 技术支持:常州山水网络
本站关键词:常州PLC培训 常州PLC编程培训 常州PLC编程 常州PLC培训班 网站地图 网站标签
在线与我们取得联系