基于opencv的贴片机圆形识别

一、发文初衷

        在贴片机研发中,圆形识别是一个非常重要的课题,PCB的mark识别,BGA芯片对位的焊盘识别,带料的孔洞识别,吸嘴对准识别,换吸嘴机构定位识别,等等不胜枚举的场景中,都要用的圆形识别,圆形识别重要性可见一斑。

        “别人一开源,我们就自主”的无耻之徒,让有开源信仰的人们,深恶痛绝。“弯道超车”的谎言,就像皇帝新衣一样,丑陋愚蠢。没有踏踏实实基础科学研究,怎么可能拥有创新超车的能力。正如opencv库一样,对图像数学建模能力和计算机编程能力有超高的要求,这样的人才应该是我们尊重和崇拜的对象,更应该对这种开源无私的精神加以保护。但遗憾的是,带着金丝边眼镜的叫兽们,却二次封装opencv后,到处兜售,以“guo产”、“自研”,“love国”道德绑架,脑满肠肥的外表,致命地腐蚀着对我们科研的发展进步。

二、应用场景

        如图所示,PCB的Mark点,吸嘴,BGA焊盘,元件编带,贴片机点位螺丝,等等,都有圆形状元素,opencv视觉库对应此类需求,非常简单就可实现。

三、opencv算法过程

        本文以元件料带的圆孔为例,一般料带孔据为4mm,只要我们识别到料带孔位置,我们可以准确推算出元件的位置。

        1、读取图像并转灰

    //读取图像
    cv::Mat src;
    src = cv::imread("tape.jpg");
    //图像转灰度
    cv::Mat gray;
    cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY); // 灰度化

         2、中值滤波

    //中值滤波
    cv::Mat median;
    cv::medianBlur(gray, median, 3); // 中值滤波去除噪声

        3、边缘检测

    //边缘检测
    Mat edges;
    cv::Canny(median, edges, 100, 200, 3, false);
    imshow("edges", edges);

        4、高斯滤波

    //高斯滤波
    Mat gaussian;
    cv::GaussianBlur(edges,gaussian,cv::Size(5,5),0);
    imshow("gaussian", gaussian);

        5、霍夫圆检测

    //霍夫圆检测  1, 50, 80, 80, 50, 200
    std::vector<Vec3f> pcircles;
    cv::HoughCircles(gaussian, pcircles, CV_HOUGH_GRADIENT, 1,
                     10,
                     80,20,
                     15,
                     25);

         6、画出检测圆

    for (size_t i = 0; i < pcircles.size(); i++) {
        Vec3f cc = pcircles[i];
        //画圆
        circle(src, Point(cc[0], cc[1]),  cc[2], Scalar(0,0,255), 1, LINE_AA);
        qDebug()<<"radiues="<< cc[2];
        //画圆心
        circle(src, Point(cc[0], cc[1]), 2, Scalar(127,255,127), 1, LINE_AA);
    }
    imshow("src", src);

        图中为灰度处理的料带,边缘检测,霍夫圆检测的三个截图

        这种圆形检测方法,具有普遍适用性,只要稍微调整,即可完成不同场合圆形检测。opencv的视觉库非常强大,还有很多有用的功能,可以应用于贴片机视觉识别中。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值