opencv,用摄像头识别贴片元件的定位和元件的角度(转载)
分类: 学习笔记 |
开源的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)
得用跟硬件无关的DirectShow显示方法
官网上有提供例子包含了DirectShow的CameraDS类,
下载这个附件运行里面的camerads.exe,看看你的电脑能不能显示,里面有源码
可以的话,就可以把CameraDS这个类改用到MFC上。
镜头畸变可以通过事先拍一张网格图来得到 --------------------------------------- 用网格来标定是一种简单的方法,但在高精度的情况下换是行不通的。 因为格与格的的插补就很复杂。如果算法不佳误差绝对是大于一个像素以上。 经常会发现算出来的定位总是不理想。 当然用来贴电阻电容是没问题,但用来贴IC问题可大了。 有关下面的进展: 测角度: |
opencv,用摄像头识别贴片元件的定位和元件的角度(转载)的更多相关文章
- 利用face_recognition,dlib与OpenCV调用摄像头进行人脸识别
用已经搭建好 face_recognition,dlib 环境来进行人脸识别 未搭建好环境请参考:https://www.cnblogs.com/guihua-pingting/p/12201077. ...
- opencv之人脸识别
最近在做一个类似于智能广告投放的项目,简单思路是利用opencv获取摄像头图像,然后调用接口或利用其他一些离线模型进行人脸属性识别,进而投放广告.本篇先简单介绍利用opecv进行人脸识别. # -*- ...
- openCV 调用摄像头
OpenCV调用摄像头 环境 python:python3.6 摄像头:网络摄像头 Python库:openCV # -*- coding: utf-8 -*- # @author leone # @ ...
- 基于 OpenCV 的人脸识别
基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...
- OpenCV+海康威视摄像头的实时读取
OpenCV+海康威视摄像头的实时读取 本文由 @lonelyrains出品.转载请注明出处. 文章链接: http://blog.csdn.net/lonelyrains/article/detai ...
- Raspberry Pi 4B 使用OpenCV访问摄像头picamera模块
目录 1.OpenCV安装 (1)安装依赖 (2)下载OpenCV源码 (3)安装pip (4)安装Python虚拟机 (5)编译OpenCV (6)验证安装 2.使用OpenCV和Python控制摄 ...
- PyQt5+Caffe+Opencv搭建人脸识别登录界面
PyQt5+Caffe+Opencv搭建人脸识别登录界面(转载) 最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的 ...
- 基于opencv网络摄像头在ubuntu下的视频获取
基于opencv网络摄像头在ubuntu下的视频获取 1 工具 原料 平台 :UBUNTU12.04 安装库 Opencv-2.3 2 安装编译运行步骤 安装编译opencv-2.3 参 ...
- Opencv——将摄像头拍摄写成视频文件
这里主要利用了Opencv打开摄像头的代码,以及写入视频的函数,只是这里要注意的是摄像头好像没有帧率,在cvCreateVideoWriter,时要自己设置 #include"cv.h&qu ...
随机推荐
- Git(2):基本操作
Git 创建仓库 执行<git init>命令后,Git仓库会生成一个.git目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(Git 只在仓库的根目录生成 .git 目录). ...
- 安装python3.6并使用virtualenvwrapper管理虚环境
1.安装python3.6.5依赖环境 注:python3.7.4需要安装:yum install libffi-devel -y yum install gcc patch libffi-devel ...
- URLSearchParams的注意事项(个人总结)
官网解释:URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串,一些方法的使用. 前天测试说 有些功能在ie实现不了,顺便把报错发我了:URLSearchParams ...
- python3速查参考- python基础 4 -> 元组 + 字典 + 字符串 的学习
元组 元组:特点就是内容不可变,算只读的列表,可以被查询,不能被修改 a = 2, print(a) print(type(a)) b = ('a','b','c') print(b[1]) 运行结果 ...
- Linux安装sdkman
项目使用java的开发者一定会为新配环境变量而头大,sdkman很好的解决了系统sdk管理的痛点,仅需简单的几行命令就可以完成sdk的安装,更改默认版本.再也不用担心环境变量的问题. 安装 既然是命令 ...
- 深入理解C语言-函数指针
函数指针在C++中有着重要的应用,函数的函数名其本质就是代表一个地址,这个地址叫做函数入口,得到这个地址就可以对这个函数进行各种操作. 函数类型基础 函数三要素: 名称.参数.返回值 C语言中的函数有 ...
- freeRTOS学习二
临界段,用一句话概括就是一段在执行时不能被中断的代码段. 临界段被打断的情况,一个是系统调度,还有一个就是外部中断. 对临界段的保护就是对中断的开和关. 空闲任务与阻塞延时 xTicksToDelay ...
- [bzoj2746][HEOI2012]旅行问题 _AC自动机_倍增
[HEOI2012]旅行问题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2746 题解: 这个是讲课时候的题. 讲课的时候都在想怎么后 ...
- 【Redis】Redis持久化
Redis数据持久化 Redis的特性: 易扩展,大数据高性能,多样灵活的数据模型,受限内存 Redis默认端口: 6379 Redis数据持久化分为有两种: RDB: 每隔一段时间就把内存数据写入磁 ...
- pb SendMessage
PB发送和接收消息send SendMessage 1.用PB自带的SEND函数发送消息 传字符:Send(Handle(w_main),1600,0,'dfdfd') 传LONG:Send(Hand ...