淺談OpenCV[轉]

?????OpenCV是一個由Interl公司支持的開源機器視覺庫,關于它的介紹,網上隨便一搜就車載斗量。這里我不談OpenCV的主要內容,而是將這段時間來對它的使用心得作個簡單介紹,以啟發打算用這個庫的朋友的思路,與大家一起來分享。

???? 我在學校的時候,雖然是圖像處理研究方向,但真正具體的應用到圖像的很多東西,還是在參加工作以后的事。以前在處理圖像的時候,我們從不擔心速度的問題,以為計算機硬件發展到今天,無所不能的了,雙核乃至四核的處理速度簡直要趕上宇宙飛船了。但用在機器視覺上,那又是另外一碼事。通常而言,機器視覺要求對圖像的處理速度都是以毫秒(ms)為單位,具體而言是幾點幾個毫秒,硬件再硬,如果算法不好,速度就永遠提不上去,所以速度還是至關重要的東西,并不是所謂由硬件技術就決定了的。

??? ?速度是一個方面,精度又是另一個重要方面了。視覺中對精度的要求,通常是以亞像素標準來衡量的。所以對圖像處理的算法,不是一般的算法來解決,往往都得使用子像元算法,這樣才能達到亞像素標準。通常我們對一幅圖像的像素坐標都是用整數計算,但在機器視覺中普遍采用亞像素標準,都是浮點數來計算的。但有的雖然寫出來的是浮點數,未必就是用的子像元算法,它的結果根本就不是亞像素。視覺中精度的要求,也是要求極高,一般以微米(um)為計量單位,像幾點幾個微米,而只有使用子像元算法才能真正達到這個要求。

??? 總的說來,目前國內還沒有一個真正意義上的成功的機器視覺開發包,國內的機器視覺方面的大公司基本上還是以代理國外的軟件為主。一方面固然是國內的起步晚,但我覺得更多原因還是國內在這方面沒有下功夫去做一些基礎性的研究工作,總是靠代理別人的東西來實現一個視覺系統的開發。而OpenCV就是一個在機器視覺方面基礎工作做得最好的。

??? 總的說來,OpenCV提供的函數庫涉及的方面很廣,圖像處理功能強大,但它僅僅是供研究的一個基礎的東西,并不是一計膏藥,往哪一貼哪就好使。我們只有在借助它提供的一些基礎功能上進行深入研究,才能開發出屬于自己的產品來。

???? OpenCV作為一個開源的函數庫,為我們提供了很多方便,看它的源代碼,確實有很多值得學習的獨到地方。但作為開源的,局限也就在此。它的很多東西并不是最優的,如果真要那樣,直接就可以拿來在商業上運用了。所以,我們只有不斷的對它進行改造,才能更貼近我們的應用,這里結合我在使用的幾處加以說明。

???? 首先是圖像的定位。OpenCV也提供了一個圖像匹配的函數,這個函數還是寫的不錯的,但要直接用到商業上就不行了。因為它的處理速度很慢,精度也不是亞像素的,而且沒有旋轉。它僅僅是一個單純的灰度定位。要怎么用好這個函數呢,在使用這個函數的時候,我還是下了很多功夫的,對此做了一些改進,讓它真正的實現了商業價值。如今我用OpenCV編寫的定位軟件,其速度和精度絲毫不比國外的那些名牌軟件差多少,像halcon和sapera這樣的軟件巨頭,我用OpenCV做出來的定位效果,比如一幅分辨率為1280*1024的圖像,它們的速度是幾個毫秒,而我做出來的也最多多3至4個毫秒,精度也差不多,但由于OpenCV本身不是亞像素的局限所在,所以精度通常在一個像素左右。???

??? 再說說幾何定位,halcon是采用基于幾何形狀的算法來進行定位的,可以說做得非常的好,好就好在它的模版圖像形狀可以任意選取,任意旋轉。而Sapera的基于邊緣輪廓的定位還要上一個層次,關于它的算法,目前還沒有人了解,至今還是個謎。在很多機器圖像定位上,幾何定位效果更好,更準確。灰度定位在一些圖像區域直方圖相近似的情況下,往往很難找準目標區域。而幾何定位,根據區域的幾何特征來做出判斷,不單準確,而且執行起來效率更高。目前我用OpenCV做的幾何定位總體上說效果還不錯,但精度還趕不上,在圖像邊緣的離合上還不那樣準確,不過在后續的研究中,還是會趕上的。

???? 一般而言,對于圖像的目標區域都是有形狀的,但在實際運用中,我遇到一個客戶只要求定位直線的,由于直線不屬于一個有形狀的區域,它的特征很難描述,所以看似最簡單的卻最難辦。OpenCV采用Hough變換來檢測直線和圓,效果也并不好。因為Hough變換的實質也就是兩種不同空間的映射,它在噪聲大的圖像中,檢測出來的結果千奇百怪。所以要準確的找到邊,必然得對圖像做好預處理,讓處理后的邊緣很明顯表現出來,再進行Hough檢測就容易多了。

??? 在機器視覺中,Blob分析是要經常遇見的,OpenCV也有Blob跟蹤的實例,但我沒去認真用過,而是自己做了個算法采用它也實現了,且效果也不錯。我在做一個啤酒瓶磨具號碼檢測的項目里,就調用了自己設計的Blob分析算法,效果都還不錯。在具體使用中,往往要用到我們自己定義的圖像類型,于是我又把OpenCV里的IplImage結構進行了改造,然后定義了屬于自己的圖像類,可以隨意讀取,這樣方便了很多。其實OPenCV里面對文件的操作寫得相當好,非常方便。

??? 總的來說,OpenCV是一個非常不錯的開源項目,有很多東西需要我們去學習。但它的源代碼,要讀明白也非易事。因為它涉及到大量的宏定義,很多函數語句都是些宏定義在里面,還互相嵌套,看起來相當的困難。而且本人接觸它的時間也不過兩三個月,所以理解得也不透徹。還得一邊用一邊學,在實踐中摸索和消化。在此只為提示一個思路而言,個中算法不便言明,否則老板看見,定然要批評了。商場如戰場,一切都要做好保密工作,哈哈!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255641.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255641.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255641.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【pyqt5學習】——tablewidget控件學習

目錄 1、Table Widget 1.QTableWidget不能在mainwindow中隨主窗口的大小變化? 2.將表格變為禁止編輯: 3.設置表格為整行選擇 4.單個選中和多個選中的設置: 5.表格表頭的顯示與隱藏 6.對表頭文字的字體、顏色進行設置 7.在單元格里加入…

吳忠軍 - 如何理解馬云所說的月入兩三萬,三四萬的人最幸福?

這句話源于一段兩分鐘的視頻,馬云的一次阿里內部會議演講。 馬云坦承,自己從第一天起就沒想過當首富,還為此稀釋公司持股,“沒想到把自己的股份降到8%,還是有那么多,這是我沒有想到的。” 在馬云看來&#…

iOS小知識點(非UI部分)

1。 _cmd 表示當前方法的SEL指針, - (void)putString{} 對于這個函數_cmd 等效于selector(putString)轉載于:https://www.cnblogs.com/dongfangchun/p/5341599.html

jQuery 操作 CSS

jQuery 擁有若干進行 CSS 操作的方法。我們將學習下面這些: addClass() - 向被選元素添加一個或多個類removeClass() - 從被選元素刪除一個或多個類toggleClass() - 對被選元素進行添加/刪除類的切換操作css() - 設置或返回樣式屬性轉載于:https://www.cnblogs.com/…

彩色CCD相機工作原理

原理 黑白(單色)相機 CCD原理并不復雜。我們可以把它想象成一個頂部被打開的記憶芯片。因此光束可以射到記憶單元中。根據"光電效應”,這些光束在記憶單元中產生負電荷(下圖中右上部分)。 曝光后&…

Linux 系統常用命令匯總(二) vi 文本編輯

文本編輯vi命令作用文件名編輯文本文件,若文件不存在同時創建該文件Ctrlf向后翻一頁Ctrlb向前翻一頁Ctrld向后翻半頁Ctrlu向前翻半頁光標移動到下一行-光標移動到上一行數字空格光標向右移動n個字符0移動到本行首個字符處$ 移動到本行最后一個字符處H光標移動到屏幕…

圖像處理與計算機視覺:基礎,經典以及最近發展(2)圖像處理與計算機視覺相關的書籍

1. 數學 我們所說的圖像處理實際上就是數字圖像處理,是把真實世界中的連續三維隨機信號投影到傳感器的二維平面上,采樣并量化后得到二維矩陣。數字圖像處理就是二維矩陣的處理,而從二維圖像中恢復出三維場景就是計算機視覺的主要任務之一。這…

【HTML學習】——HTML常見標簽屬性和方法介紹

目錄 1、HTML分塊--------< div> 2、HTML段落--------< p> 3、HTML標題--------< h1>…< h6> 4、HTML鏈接--------< a> 1)< a href“http://www.baidu.com”>百度< /a>&#xff08;點擊百度&#xff0c;直接跳轉到網頁&#xf…

開發者應警惕的七種糟糕職業規劃錯誤

那些心靈雞湯式的說辭總愛美化失敗&#xff1a;失敗是成功之母啦、失敗使人成長啦、別畏懼失敗等等。但事實上&#xff0c;這種思路在軟件開發領域也許并不適用——至少不完全適用。每位開發者在職業生涯中都不可避免會遭遇失敗&#xff0c;但為什么不從他人的經驗中汲取教訓來…

Splay模板

打LCT的時候發現Splay很不熟, 因此這里貼一下模板 洛谷P3369 https://www.luogu.org/problem/show?pid3369#sub /* 提一些要注意的點: 1. 注意判斷邊界, 不要訪問到空節點 2. 每一次操作或訪問完以后, 記得要splay到root 3. insert操作只要update當前節點和父親節點即可, 因為…

圖像處理與計算機視覺 基礎、經典以及最近發展

申明&#xff1a;本文非筆者原創&#xff0c;原文轉載自&#xff1a;http://blog.csdn.net/liuyue2046/article/details/12658441 ***************************************************************************************************************************************…

【HTML學習】——一個網頁HTML編程的構成

目錄 1、html網頁構成介紹 2、HTML標簽介紹 全部的html標簽&#xff1a; HTML: HyperText Markup Language | MDNhttps://developer.mozilla.org/en-US/docs/Web/HTML 一個網頁文件一般由.html結尾的文件組成&#xff0c;主要由不同的標簽對和內容組成&#xff0c;常見的html…

hbase里插入big int數據用Phoenix查看的報錯問題

Phoenix建表create table "test_big_int"("ROW" varchar primary key,"ci"."column1" bigint) 在hbase里put數據hbase 里面進行put: put test_big_int,001,ci:column1,1 在Phoenix里進行查看&#xff08;問題出現&#xff09;第二個嘗…

機器學習:利用卷積神經網絡實現圖像風格遷移 (一)

相信很多人都對之前大名鼎鼎的 Prisma 早有耳聞&#xff0c;Prisma 能夠將一張普通的圖像轉換成各種藝術風格的圖像&#xff0c;今天&#xff0c;我們將要介紹一下Prisma 這款軟件背后的算法原理。就是發表于 2016 CVPR 一篇文章&#xff0c; “ Image Style Transfer Using Co…

jquery中attr和prop的區別

在高版本的jquery引入prop方法后&#xff0c;什么時候該用prop&#xff1f;什么時候用attr&#xff1f;它們兩個之間有什么區別&#xff1f;這些問題就出現了。 關于它們兩個的區別&#xff0c;網上的答案很多。這里談談我的心得&#xff0c;我的心得很簡單&#xff1a; ?對于…

博客園自定義樣式

碎碎念&#xff1a; 已經很長時間沒有更新過博客了&#xff0c;分析一下&#xff0c;一個是太懶了。。。所以很久沒整理一下了。還有就是嫌棄博客園默認的博客界面真的太丑了&#xff0c;作為顏控的我真的無法忍受啊。個人比較喜歡用makedown來編寫博客&#xff0c;但是博客園自…

【CSS】——cascading stylesheets層疊式樣式表

目錄 0、CSS介紹 1、CSS語句組成 2、CSS選擇器的選擇方式 1&#xff09;CSS選擇器的方式和選擇器大全&#xff1a; 2&#xff09;常見的三種方式&#xff1a; 3、添加CSS方式 1&#xff09;外部樣式表 html調用css代碼 css文件 html文件 展示 2&#xff09;內部樣式表…

四 Apache Axis2 部署 WebService

最新版本1.7.4發布日期2016-10-21 Axis2官網下載如下文件&#xff1a; axis2-1.6.2-bin&#xff1a;二進制的axis axis2-1.6.2-docs&#xff1a;幫助文檔 axis2-1.6.2-war&#xff1a;axis.war 文件 axis2-eclipse-codegen-plugin-1.6.2&#xff1a;Eclipse axis client 插件 a…

安裝OpenCV:OpenCV 2.4.8或OpenCV 2.4.9 +VS 開發環境配置

因為讀研期間的研究方向是圖像處理&#xff0c;所以淺墨這段時間閉門研究了很多OpenCV和圖像處理相關的知識與內容。眼看自己積累到一定的程度了&#xff0c;于是決定開始開設這個OpenCV系列專欄&#xff0c;總結自己所學&#xff0c;也分享知識給大家。 好了&#xff0c;這篇文…

powerdesigner中如何在自動生成建表SQL時添加模式名schema

1、在主菜單中選擇“模型”→“users and roles”→“users”&#xff0c;新增一個user&#xff0c;其中"name"字段就是要添加的模式名。 2、在新增表時&#xff0c;在表屬性的“general”頁簽中選擇"owner"&#xff0c;選擇剛才新增的user&#xff0c;即可…