经过半个月学习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. java数据机构之自定义栈

    一.栈的特点 1.线性数据结构 2.后进先出 二.使用数组来实现栈 //使用数组来实现栈 public class MyArrayStack<E> { //保存数据 private Obj ...

  2. 【机器学习】QQ-plot深入理解与实现

    QQ-plot深入理解与实现 26JUN June 26, 2013 最近在看关于CSI(Channel State Information)相关的论文,发现论文中用到了QQ-plot.Sigh!我承 ...

  3. 「java.util.concurrent并发包」之 ReentrantReadWriteLock

    一 引言 在多线程的环境下,对同一份数据进行读写,会涉及到线程安全的问题.比如在一个线程读取数据的时候,另外一个线程在写数据,而导致前后数据的不一致性:一个线程在写数据的时候,另一个线程也在写,同样也 ...

  4. c++练习—实现简单的4则运算

    #pragma once class Counter { public: void setExp(const char* exp);//设置表达式 void cleanExp(); //清除表达式 v ...

  5. Mathematically Hard LightOJ-1007(欧拉定理+前缀和)

    Description Mathematically some problems look hard. But with the help of the computer, some problems ...

  6. MySql常用字符集

    常用字符集 位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数. 字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写 B 来表示,1B(byte,字节) ...

  7. Python编程之注释

    一.注释 当你把变量理解透了,你就已经进入了编程的世界.随着学习的深入,用不了多久,你就可以写复杂的上千甚至上万行的代码啦,有些代码你花了很久写出来,过了些天再回去看,发现竟然看不懂了,这太正常了. ...

  8. 技能节-AI人脸识别

    我们收到技能节项目的通知是在两周之前,项目要求做个人脸评分系统. 两周时间写一个"人脸评分系统",好像时间比较紧了,还好我们完成了~这个项目是将摄像头捕获到的包含人脸的图像传输到百 ...

  9. Code First项目Migrations

    关于Enable-Migrations指令说明我们知道,Enable-Migrations的作用是在Code First项目中使用数据迁移,通过get-help Enable-Migrations查看 ...

  10. 【题解】codevs 3044 矩形面积合并

    传送门 3044 矩形面积求并 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下 ...