因?yàn)樽罱胱鰣D像處理、人臉檢測(cè)/識(shí)別之類(lèi)的相關(guān)開(kāi)發(fā),所以就開(kāi)始補(bǔ)OpenCV的相關(guān)知識(shí),便開(kāi)個(gè)專(zhuān)欄用于記錄學(xué)習(xí)歷程和在學(xué)習(xí)過(guò)程中遇到的一些值得注意的重點(diǎn)和坑。
學(xué)習(xí)過(guò)程基本上也是面向官方文檔和Google。
簡(jiǎn)介
OpenCV(開(kāi)源的計(jì)算機(jī)視覺(jué)庫(kù))是基于BSD協(xié)議,因此它可免費(fèi)用于學(xué)術(shù)和商業(yè)用途。
其提供C++,C,Python和Java接口,支持Windows,Linux,Mac OS,iOS和Android。
OpenCV致力于高效運(yùn)算和即時(shí)應(yīng)用開(kāi)發(fā)。因其是用優(yōu)化的C/C++編寫(xiě)的,故其可以充分利用多核處理優(yōu)勢(shì)。
并且還啟用了OpenSL,它可以利用底層異構(gòu)計(jì)算平臺(tái)的硬件加速。
廣泛運(yùn)用在世界各地,OpenCV擁有超過(guò)4.7萬(wàn)人的用戶(hù)社區(qū)和超過(guò)1400萬(wàn)的下載次數(shù)。
從互動(dòng)藝術(shù)、礦山檢查、網(wǎng)絡(luò)地圖到先進(jìn)的機(jī)器人技術(shù)都有OpenCV的身影。
它包含了數(shù)百個(gè)計(jì)算機(jī)視覺(jué)算法。它有一個(gè)模塊化的結(jié)構(gòu),囊括了幾個(gè)共享的或靜態(tài)的庫(kù),其中包括:
Core functionality(核心功能):一個(gè)簡(jiǎn)潔基本且模塊化的數(shù)據(jù)結(jié)構(gòu),包含了多維數(shù)組(矩陣)和用于其他模塊的基本功能。
Image processing(圖像處理):包括線(xiàn)性和非線(xiàn)性的圖像濾波、幾何圖像轉(zhuǎn)換(縮放、仿射和透視調(diào)整)、顏色模式轉(zhuǎn)換、直方圖等等。
Video(視頻):一個(gè)視頻分析模塊,其包含了運(yùn)動(dòng)估計(jì)、背景消除和目標(biāo)跟蹤算法。
Calib3d:提供基本的多視圖幾何算法、平面和立體影像校正、物體定位、立體通信算法和三維重建。
Features2d:顯著特征探測(cè)器、描述符和描述符匹配器。
Objectect:檢測(cè)對(duì)象和預(yù)定義的類(lèi)的實(shí)例(例如:臉部、眼睛、杯子、人、車(chē)等等)。
Highgui(圖形界面):提供一個(gè)簡(jiǎn)單易用的UI。
Video I/O:提供一個(gè)簡(jiǎn)單易用的視頻捕獲和編碼解碼界面。
GPU:來(lái)自于不同的OpenCV模塊的GPU加速算法。
......一些其他的輔助模塊,例如FLANN(神經(jīng)網(wǎng)絡(luò))和Google測(cè)試封裝、Python綁定等等。
下面來(lái)講一下OpenCV的下載和安裝(C++和Python3 API)。
C++
先從官網(wǎng)上下載好文件包:Releases - OpenCV library
https://link.zhihu.com/?target=https%3A//opencv.org/releases.html
建議選擇最新的3.3.1 Win Pack。
下載好后,雙擊運(yùn)行exe程序解壓,選擇一個(gè)解壓后的目錄。
(其會(huì)自動(dòng)生成一個(gè)opencv目錄,不需要單獨(dú)再創(chuàng)一個(gè)opencv目錄。另,不建議將其解壓到C盤(pán)根目錄下的Program Files或Program File (x86)目錄下,可能會(huì)因系統(tǒng)權(quán)限導(dǎo)致各種問(wèn)題)
解壓完畢后,將其寫(xiě)入系統(tǒng)的環(huán)境變量中,向Path中添加一條:"解壓后opencv所在的文件夾目錄opencvuildx64vc14in",
例如我將其解壓在C:Leon下,則添加:C:Leonopencvuildx64vc14in。
這樣OpenCV3.3.1就算安裝好了,接下來(lái)就在自己IDE中配置一下就行。
例如我C++開(kāi)發(fā)環(huán)境是Visual Studio 2017,相應(yīng)的項(xiàng)目創(chuàng)建配置流程如下:
1. 打開(kāi)Visual Studio,新建一個(gè)項(xiàng)目(快捷鍵Ctrl+Shift+N),項(xiàng)目名自取,選擇好創(chuàng)建目錄。
第一步圖
2. 新建一個(gè)C++文件(快捷鍵Ctrl+Shift+A)。
第二步圖
3. 將菜單欄下的Debug后的x86改為x64。
第三步圖
4. 單擊右側(cè)窗口的Property Manager(屬性管理),或者點(diǎn)擊菜單欄中的View(視圖)->Other Windows(其他窗口)->Property Manager(屬性管理)。
第四步圖
5. 右鍵屬性管理窗口中的Debug | x64,選擇Property(屬性),編輯包含目錄。
第五步圖
6. 添加三個(gè)目錄路徑并確定。(注意路徑是你opencv安裝的路徑)
第六步圖
7. 同理,添加庫(kù)目錄,如圖所示。
第七步圖1
第七步圖2
8. 添加附加依賴(lài)項(xiàng)。
鏈接器->輸入->附加依賴(lài)項(xiàng)。
將opencv_world331d.lib鍵盤(pán)敲入(注意opencv版本,3.3.1是331,其他版本自行腦補(bǔ))。
第八步圖1
第八步圖2
9. 確定,應(yīng)用。庫(kù)的導(dǎo)入已經(jīng)完成了。接下來(lái)就可以開(kāi)始OpenCV相關(guān)開(kāi)發(fā)了。
10. 先將以下代碼(功能是顯示一張圖片)寫(xiě)入項(xiàng)目中的Source.cpp文件,編譯鏈接運(yùn)行(快捷鍵Ctrl+F5),看是否能跑起來(lái),跑起來(lái)了說(shuō)明配置成功!
#includeusing namespace cv; int main() { Mat img = imread("C:\Users\11537\Desktop\新垣結(jié)衣.jpg"); //引號(hào)內(nèi)選一張自己計(jì)算機(jī)內(nèi)的圖片的路徑 imshow("新垣結(jié)衣", img); //打開(kāi)一個(gè)窗口,顯示圖片 waitKey(0); //在鍵盤(pán)敲入字符前程序處于等待狀態(tài) destroyAllWindows(); //關(guān)閉所有窗口 return 0; }
Python 3.x
相對(duì)于C++,Python的Opencv庫(kù)導(dǎo)入就相對(duì)簡(jiǎn)單很多了。
一提及Python安裝第三方庫(kù),大家第一時(shí)間會(huì)想到pip,的確pip是Python第三方庫(kù)安裝的利器。
首先我們得先安裝另一個(gè)第三方庫(kù)numpy,這是opencv的依賴(lài)庫(kù),沒(méi)有它無(wú)法進(jìn)行python-opencv開(kāi)發(fā)。
很簡(jiǎn)單,保持有網(wǎng)狀態(tài)命令行下輸入pip install numpy,自動(dòng)下載安裝完后搞定。
比較遺憾的是默認(rèn)的pip源中沒(méi)有opencv這個(gè)庫(kù),不能直接pip install opencv,不過(guò)這時(shí)候我們可以下載其whl文件,下載地址:Python Extension Packages for Windows
https://link.zhihu.com/?target=https%3A//www.lfd.uci.edu/~gohlke/pythonlibs/
在頁(yè)面中找到OpenCV欄,根據(jù)自己計(jì)算機(jī)中Python解釋器版本選擇下載文件。
下載好后,通過(guò)命令行到whl文件目錄下,pip install [下載的whl完整文件名]。例如pip install opencv_python-3.3.1-cp36-cp36m-win_amd64.whl
tip: 可以通過(guò)這個(gè)方法下載其他whl文件,用法一樣,可以在無(wú)網(wǎng)狀態(tài)下直接pip install whl文件導(dǎo)入第三方庫(kù)
對(duì)于PyCharm用了Virtualenv虛擬環(huán)境的用戶(hù),可以在IDE中打開(kāi)命令行界面到該項(xiàng)目venv/Scripts目錄下./pip install numpy以及whl文件導(dǎo)入虛擬目錄site-packages文件夾中。
同樣上個(gè)測(cè)試代碼(功能是顯示一張圖片):
import numpy as np import cv2 def cv2_imread(file_path, flag=1): """解決包含中文的路徑cv2.imread無(wú)法打開(kāi)的問(wèn)題的函數(shù)""" return cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), flag) if __name__ == "__main__": img = cv2_imread("C:\Users\11537\Desktop\長(zhǎng)澤雅美.jpg") #第一個(gè)參數(shù)選一張自己計(jì)算機(jī)內(nèi)的圖片的路徑 cv2.imshow("Nagasawa Masami", img) #python的cv2.imshow第一個(gè)參數(shù)(即窗口名)為中文會(huì)亂碼,至今未找到有效解決方案 cv2.waitKey(0) #在鍵盤(pán)敲入字符前程序處于等待狀態(tài) cv2.destroyAllWindows() #關(guān)閉所有窗口
小結(jié)
一次OpenCV初體驗(yàn),個(gè)人覺(jué)得可能是歷史遺留問(wèn)題(以前的OpenCV是完全由C實(shí)現(xiàn)的),OpenCV的OOP特性并不強(qiáng),跟Python的另一個(gè)圖像庫(kù)pillow相比用起來(lái)感覺(jué)有點(diǎn)怪。
不過(guò)不得不說(shuō),OpenCV還是挺強(qiáng)大的。至于C++和Python關(guān)于OpenCV接口問(wèn)題,其實(shí)實(shí)現(xiàn)都大同小異,也沒(méi)必要糾結(jié)于到底用C++好還是Python好,移植重構(gòu)很容易。
審核編輯:黃飛
-
圖像處理
+關(guān)注
關(guān)注
27文章
1281瀏覽量
56638 -
人臉檢測(cè)
+關(guān)注
關(guān)注
0文章
80瀏覽量
16441 -
OpenCV
+關(guān)注
關(guān)注
30文章
628瀏覽量
41260 -
python
+關(guān)注
關(guān)注
56文章
4782瀏覽量
84452
原文標(biāo)題:OpenCV簡(jiǎn)介及安裝
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論