经过半个月学习opencv有点小成果,用摄像头识别贴片元件的定位和元件的角度(转载)

(2013-04-17 16:00:22)

  分类: 学习笔记
先说一下
开源的opencv真是一件伟大的产品,
那么多个函数跟变量(具体多少还没数过),要是结合起来综合运用几乎可以胜
任任何有关图像识别和处理方面的工作。。如果能更深入一点根据具体需要修改或优
化里面的源码那更是如虎添翼。。

花了点时间浏览了www.opencv.org.cn论坛里的所有贴子,还好不多才200多页,
总体上对opencv里的一些常用函数功能作用大致有点了解,筛选一些跟元件识别有关的运用内容,但它论坛里的贴子回复的内容点到即止的居多。
从网上下载了能搜到的教程跟代码全学习了解测试了一下
图像处理流程通常先开始都是要进行滤波,除燥,灰度,二值化后再轮廓识别等。

开始动手
经过多次好多次运行测试组合,终于有一次显示出意外的惊人效果,而且相当简单只是调用了几个函数而以,就可以有这样效果实在出人意料

第一个是进行元件中心点获取,也是直接调用函数再加点东西就可以得出元件的四个矩形顶点坐标,有这几个坐标就可以直接算出元件中间点所在的坐标了,
如果要检测元件摆放角度是否是垂直90度,只要判断边宽的长度为最小或最大时就是垂直90度。。。

(原文件名:1.jpg)

测试视频地址: http://v.youku.com/v_show/id_XMjU5NzY5NTI0.html

但这个矩形框无法测出元件具体角度

不过,
又搜到
还有另外一个函数可以提供这个功能,调用后可以直接求出最小外接矩形和角度
如图。。。


(原文件名:2.jpg)

测试视频地址: http://v.youku.com/v_show/id_XMjYwMDMzMDc2.html

里面的光源不行,临时用手电筒,和在光盘上插几个LED做环形灯做照明 无法做到无阴影显示,
如果光源做的好,效果应该是非常精确稳定。。

源代码,等整理后再放上来。。希望熟悉opencv的人能提供更多一些使用经验

 
我这里方法是这几步
1.读取图像
2.调用cvCvtColor(src, gray, CV_BGR2GRAY);  把三通道彩色转成单通常8位灰度图像
3.调用smooth函数对灰度图像进行滤波说白了就是把图像变模糊,让边缘变光滑,这个好处理外形轮廓
4.把滤波后灰度值图像再过滤成黑白二色图像
4.调用轮廓识别函数cvFindContours是从二值图像中直接检索出所有轮廓
5.主要工作完成。。
剩下就是把图画出来

只要把图像过滤成黑白二值后,下面就可以直接调用识别轮廓函数进行识别,前面几步过滤的越好,识别出来的精度越高
我这个只用smooth函数对图像进行模糊一下,其实前期除燥处理还有其它多种方法,跟组合方法

这里调用smooth滤波的效果是:比如未滤波前图像清晰度很高,边边角角太过清晰分明,
这样结果会使后面的黑白二值处理边缘不平整,再调用轮廓识别函数找出来的轮廓就不精准


(原文件名:2.JPG)

经过适当滤波后这时边缘平滑,二值化后就很平整,这样最好识别,
但是滤波也不能太过头,因为精准度会产生误差,因为滤完后图像跟原图已经有所不同了


(原文件名:3.JPG)

所以操作步骤是:
光源最好越好越好,物体跟背景颜色反差大一点,像白色跟黑色
先调第1个滑块给图像适当滤波,然再再调第二个滑块出现平滑边缘,就可以比较准确的识别
更精准识别,图像要越大越清晰,精准度越高,靠进摄像头近一点,焦距调清晰一点,物体显示大一点,这样效果也相当好
但是这样太考近对边缘任棱角太多的物体就不好用,边缘齿太多的物体还是放远点模糊一点比较好。

opencv功能很强大,前期的预处理可以有多种方法做,这个还需要不断的学习中。。
只要预处理做好了,变成二值图后,后面就可以省心给轮廓识别函数去得出结果了。。


(原文件名:kk.jpg)

 
 
有关打不开摄像头的问题:
 
这种情况估计是Opencv无法识别摄像头驱动。。
得用跟硬件无关的DirectShow显示方法
官网上有提供例子包含了DirectShow的CameraDS类,

下载这个附件运行里面的camerads.exe,看看你的电脑能不能显示,里面有源码
可以的话,就可以把CameraDS这个类改用到MFC上。

 
有关摄像头校正问题:
镜头畸变可以通过事先拍一张网格图来得到
---------------------------------------
用网格来标定是一种简单的方法,但在高精度的情况下换是行不通的。
因为格与格的的插补就很复杂。如果算法不佳误差绝对是大于一个像素以上。
经常会发现算出来的定位总是不理想。

当然用来贴电阻电容是没问题,但用来贴IC问题可大了。

有关下面的进展:
是不是你的摄像头速度慢?
我以前玩过打线机,我感觉用高速摄像头加显微镜头,给电机反馈位置,相当于闭环,应该可以做到那个精度的,或者先用低倍镜头的摄像头给芯片粗定位,当芯片进入显微镜头范围内再用高倍摄像头测位置,这时候差他几个像素也没问题。

测角度:
如果测算角度的话,用hough变换可以很快找到直线,然后算角度。

 
 

原载网址:http://www.amobbs.com/thread-4684408-1-1.html

opencv,用摄像头识别贴片元件的定位和元件的角度(转载)的更多相关文章

  1. 利用face_recognition,dlib与OpenCV调用摄像头进行人脸识别

    用已经搭建好 face_recognition,dlib 环境来进行人脸识别 未搭建好环境请参考:https://www.cnblogs.com/guihua-pingting/p/12201077. ...

  2. opencv之人脸识别

    最近在做一个类似于智能广告投放的项目,简单思路是利用opencv获取摄像头图像,然后调用接口或利用其他一些离线模型进行人脸属性识别,进而投放广告.本篇先简单介绍利用opecv进行人脸识别. # -*- ...

  3. openCV 调用摄像头

    OpenCV调用摄像头 环境 python:python3.6 摄像头:网络摄像头 Python库:openCV # -*- coding: utf-8 -*- # @author leone # @ ...

  4. 基于 OpenCV 的人脸识别

    基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...

  5. OpenCV+海康威视摄像头的实时读取

    OpenCV+海康威视摄像头的实时读取 本文由 @lonelyrains出品.转载请注明出处. 文章链接: http://blog.csdn.net/lonelyrains/article/detai ...

  6. Raspberry Pi 4B 使用OpenCV访问摄像头picamera模块

    目录 1.OpenCV安装 (1)安装依赖 (2)下载OpenCV源码 (3)安装pip (4)安装Python虚拟机 (5)编译OpenCV (6)验证安装 2.使用OpenCV和Python控制摄 ...

  7. PyQt5+Caffe+Opencv搭建人脸识别登录界面

    PyQt5+Caffe+Opencv搭建人脸识别登录界面(转载) 最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的 ...

  8. 基于opencv网络摄像头在ubuntu下的视频获取

     基于opencv网络摄像头在ubuntu下的视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译运行步骤 安装编译opencv-2.3  参 ...

  9. Opencv——将摄像头拍摄写成视频文件

    这里主要利用了Opencv打开摄像头的代码,以及写入视频的函数,只是这里要注意的是摄像头好像没有帧率,在cvCreateVideoWriter,时要自己设置 #include"cv.h&qu ...

随机推荐

  1. 关于注释【code templates】,如何导入本地注释文件

    关于如何在eclipse.myeclipse导入本地注释文件 [xxx.xml]   请看操作方式 下面是code templates文件的内容 注意  把文件中的 @@@@@@@@@@@@@@@  ...

  2. git学习教程二之远程仓库学习

    首先你需要注册一个github用户名,我的github账户是:1654218052@qq.com 由于本地的git仓库和github的仓库是通过SSH加密的,所以我们还需要设置一点东西哦 第1步:创建 ...

  3. plsql 查询中文乱码问题

    记录一下解决中文乱码 设置环境变量 set path=E:\app\Administrator\product\instantclient_10_2 set TNS_ADMIN=E:\app\Admi ...

  4. 【Hadoop】Hadoop的数据压缩方式

    概述 ​ 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在Hadoop下,尤其是数据规模很大和工作负载密集的情况下,使用数据压缩显得非常重要.在这种情况下 ...

  5. 网站循环加载监控-C#

    背景: 公司有一个报表的网站,服务器或系统不太稳定,导致客户有时候查看报表网址的时候网站打不开或者打开时间过长,影响用户体验 需求: 通过程序循环打开网址了解加载情况,使用谷歌浏览器内核.,程序开发不 ...

  6. Java中的责任链设计模式,太牛了!

    责任链设计模式的思想很简单,就是按照链的顺序执行一个个处理方法,链上的每一个任务都持有它后面那个任务的对象引用,以方便自己这段执行完成之后,调用其后面的处理逻辑. 下面是一个责任链设计模式的简单的实现 ...

  7. 经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)

    一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定 ...

  8. CSM(Certified Scrum Master) 敏捷认证是什么?

    Scrum 是用于开发和持续支持复杂产品的一个框架.Scrum 基于试验性过程控制理论,借鉴了精益思想.时间盒.模块化设计等,并完整地体现了敏捷宣言和敏捷原则.Scrum 采用一种迭代.增量式的方法来 ...

  9. C# HttpWebRequest请求远程地址获取返回消息

    HttpWebRequest请求远程地址获取返回消息 /// <summary> /// 请求远程Api获取响应返回字符串 /// </summary> /// <par ...

  10. Fix Scheduled Task Won’t Run for .BAT File

    Step 1: Check File/Folder Permissions The first step to fixing this issue is ensuring that the accou ...