opencv,用摄像头识别贴片元件的定位和元件的角度(转载)
生活随笔
收集整理的這篇文章主要介紹了
opencv,用摄像头识别贴片元件的定位和元件的角度(转载)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
經過半個月學習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變換可以很快找到直線,然后算角度。 |
轉載于:https://www.cnblogs.com/yuanhuang32/p/10825628.html
總結
以上是生活随笔為你收集整理的opencv,用摄像头识别贴片元件的定位和元件的角度(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 019.MFC_两种对话框
- 下一篇: linux shutdown 命令 关机