OpenCV_01 简介+无版权安装+模块分析
?OpenCV是應(yīng)用廣泛的開源圖像處理庫,我們以其為基礎(chǔ),介紹相關(guān)的圖像處理方法:包括基本的圖像處理方法:幾何變換,形態(tài)學(xué)變換,圖像平滑,直方圖操作,模板匹配,霍夫變換等;特征提取和描述方法:理解角點(diǎn)特征,Harris和Shi-Tomas算法,SIFT/SURF算法,Fast算法,ORB算法等;還有OpenCV在視頻操作中的應(yīng)用,最后的案例是使用OpenCV進(jìn)行人臉檢測。
1.1 圖像是什么
圖像是人類視覺的基礎(chǔ),是自然景物的客觀反映,是人類認(rèn)識(shí)世界和人類本身的重要源泉。“圖”是物體反射或透射光的分布,“像“是人的視覺系統(tǒng)所接受的圖在人腦中所形版的印象或認(rèn)識(shí),照片、繪畫、剪貼畫、地圖、書法作品、手寫漢學(xué)、傳真、衛(wèi)星云圖、影視畫面、X光片、腦電圖、心電圖等都是圖像?!γ? 數(shù)字圖像處理:機(jī)械工業(yè)出版社,2014年。
1.1.1?模擬圖像和數(shù)字圖像
圖像起源于1826年前后法國科學(xué)家Joseph Nicéphore Niépce發(fā)明的第一張可永久保存的照片,屬于模擬圖像。模擬圖像又稱連續(xù)圖像,它通過某種物理量(如光、電等)的強(qiáng)弱變化來記錄圖像亮度信息,所以是連續(xù)變換的。模擬信號的特點(diǎn)是容易受干擾,如今已經(jīng)基本全面被數(shù)字圖像替代。
在第一次世界大戰(zhàn)后,1921年美國科學(xué)家發(fā)明了Bartlane System,并從倫敦傳到紐約傳輸了第一幅數(shù)字圖像,其亮度用離散數(shù)值表示,將圖片編碼成5個(gè)灰度級,如下圖所示,通過海底電纜進(jìn)行傳輸。在發(fā)送端圖片被編碼并使用打孔帶記錄,通過系統(tǒng)傳輸后在接收方使用特殊的打印機(jī)恢復(fù)成圖像。
1950年左右,計(jì)算機(jī)被發(fā)明,數(shù)字圖像處理學(xué)科正式誕生。
模擬圖像和數(shù)字圖像的對比,我們可以看一下:
1.2 數(shù)字圖像的表示
1.2.1 位數(shù)
計(jì)算機(jī)采用0/1編碼的系統(tǒng),數(shù)字圖像也是利用0/1來記錄信息,我們平常接觸的圖像都是8位數(shù)圖像,包含0~255灰度,其中0,代表最黑,1,表示最白。
?人眼對灰度更敏感一些,在16位到32位之間。
1.2.2 圖像的分類
二值圖像:
一幅二值圖像的二維矩陣僅由0、1兩個(gè)值構(gòu)成,“0”代表黑色,“1”代白色。由于每一像素(矩陣中每一元素)取值僅有0、1兩種可能,所以計(jì)算機(jī)中二值圖像的數(shù)據(jù)類型通常為1個(gè)二進(jìn)制位。二值圖像通常用于文字、線條圖的掃描識(shí)別(OCR)和掩膜圖像的存儲(chǔ)。
灰度圖:
每個(gè)像素只有一個(gè)采樣顏色的圖像,這類圖像通常顯示為從最暗黑色到最亮的白色的灰度,盡管理論上這個(gè)采樣可以任何顏色的不同深淺,甚至可以是不同亮度上的不同顏色。灰度圖像與黑白圖像不同,在計(jì)算機(jī)圖像領(lǐng)域中黑白圖像只有黑色與白色兩種顏色;但是,灰度圖像在黑色與白色之間還有許多級的顏色深度?;叶葓D像經(jīng)常是在單個(gè)電磁波頻譜如可見光內(nèi)測量每個(gè)像素的亮度得到的,用于顯示的灰度圖像通常用每個(gè)采樣像素8位的非線性尺度來保存,這樣可以有256級灰度(如果用16位,則有65536級)。
彩色圖:
每個(gè)像素通常是由紅(R)、綠(G)、藍(lán)(B)三個(gè)分量來表示的,分量介于(0,255)。RGB圖像與索引圖像一樣都可以用來表示彩色圖像。與索引圖像一樣,它分別用紅(R)、綠(G)、藍(lán)(B)三原色的組合來表示每個(gè)像素的顏色。但與索引圖像不同的是,RGB圖像每一個(gè)像素的顏色值(由RGB三原色表示)直接存放在圖像矩陣中,由于每一像素的顏色需由R、G、B三個(gè)分量來表示,M、N分別表示圖像的行列數(shù),三個(gè)M x N的二維矩陣分別表示各個(gè)像素的R、G、B三個(gè)顏色分量。RGB圖像的數(shù)據(jù)類型一般為8位無符號整形,通常用于表示和存放真彩色圖像。
2.1 OpenCV簡介
OpenCV是一款由Intel公司俄羅斯團(tuán)隊(duì)發(fā)起并參與和維護(hù)的一個(gè)計(jì)算機(jī)視覺處理開源軟件庫,支持與計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)相關(guān)的眾多算法,并且正在日益擴(kuò)展。
OpenCV的優(yōu)勢:
編程語言
OpenCV基于C++實(shí)現(xiàn),同時(shí)提供python, Ruby, Matlab等語言的接口。OpenCV-Python是OpenCV的Python API,結(jié)合了OpenCV C++ API和Python語言的最佳特性。
跨平臺(tái)
可以在不同的系統(tǒng)平臺(tái)上使用,包括Windows,Linux,OS X,Android和iOS?;贑UDA和OpenCL的高速GPU操作接口也在積極開發(fā)中
活躍的開發(fā)團(tuán)隊(duì)
豐富的API
完善的傳統(tǒng)計(jì)算機(jī)視覺算法,涵蓋主流的機(jī)器學(xué)習(xí)算法,同時(shí)添加了對深度學(xué)習(xí)的支持。
2.2 OpenCV-Python
OpenCV-Python是一個(gè)Python綁定庫,旨在解決計(jì)算機(jī)視覺問題。
Python是一種由Guido van Rossum開發(fā)的通用編程語言,它很快就變得非常流行,主要是因?yàn)樗暮唵涡院痛a可讀性。它使程序員能夠用更少的代碼行表達(dá)思想,而不會(huì)降低可讀性。
與C / C++等語言相比,Python速度較慢。也就是說,Python可以使用C / C++輕松擴(kuò)展,這使我們可以在C / C++中編寫計(jì)算密集型代碼,并創(chuàng)建可用作Python模塊的Python包裝器。這給我們帶來了兩個(gè)好處:首先,代碼與原始C / C++代碼一樣快(因?yàn)樗窃诤笈_(tái)工作的實(shí)際C++代碼),其次,在Python中編寫代碼比使用C / C++更容易。OpenCV-Python是原始OpenCV C++實(shí)現(xiàn)的Python包裝器。
OpenCV-Python使用Numpy,這是一個(gè)高度優(yōu)化的數(shù)據(jù)庫操作庫,具有MATLAB風(fēng)格的語法。所有OpenCV數(shù)組結(jié)構(gòu)都轉(zhuǎn)換為Numpy數(shù)組。這也使得與使用Numpy的其他庫(如SciPy和Matplotlib)集成更容易。
2.3 OpenCV部署方法
安裝OpenCV之前需要先安裝numpy, matplotlib。
創(chuàng)建Python虛擬環(huán)境cv, 在cv中安裝即可。
先安裝OpenCV-Python, 由于一些經(jīng)典的算法被申請了版權(quán),新版本有很大的限制,所以選用3.4.3以下的版本
pip install opencv-python==3.4.2.17現(xiàn)在可以測試下是否安裝成功,運(yùn)行以下代碼無報(bào)錯(cuò)則說明安裝成功。
import cv2 # 讀一個(gè)圖片并進(jìn)行顯示(圖片路徑需自己指定) lena=cv2.imread("opencv.jpg") cv2.imshow("image",lena) cv2.waitKey(0)如果我們要利用SIFT和SURF等進(jìn)行特征提取時(shí),還需要安裝:
pip install opencv-contrib-python==3.4.2.172.4?OpenCV的模塊
下圖列出了OpenCV中包含的各個(gè)模塊:
其中core、highgui、imgproc是最基礎(chǔ)的模塊,該課程主要是圍繞這幾個(gè)模塊展開的,分別介紹如下:
- core模塊實(shí)現(xiàn)了最核心的數(shù)據(jù)結(jié)構(gòu)及其基本運(yùn)算,如繪圖函數(shù)、數(shù)組操作相關(guān)函數(shù)等。
- highgui模塊實(shí)現(xiàn)了視頻與圖像的讀取、顯示、存儲(chǔ)等接口。
- imgproc模塊實(shí)現(xiàn)了圖像處理的基礎(chǔ)方法,包括圖像濾波、圖像的幾何變換、平滑、閾值分割、形態(tài)學(xué)處理、邊緣檢測、目標(biāo)檢測、運(yùn)動(dòng)分析和對象跟蹤等。
對于圖像處理其他更高層次的方向及應(yīng)用,OpenCV也有相關(guān)的模塊實(shí)現(xiàn)
- features2d模塊用于提取圖像特征以及特征匹配,nonfree模塊實(shí)現(xiàn)了一些專利算法,如sift特征。
- objdetect模塊實(shí)現(xiàn)了一些目標(biāo)檢測的功能,經(jīng)典的基于Haar、LBP特征的人臉檢測,基于HOG的行人、汽車等目標(biāo)檢測,分類器使用Cascade Classification(級聯(lián)分類)和Latent SVM等。
- stitching模塊實(shí)現(xiàn)了圖像拼接功能。
- FLANN模塊(Fast Library for Approximate Nearest Neighbors),包含快速近似最近鄰搜索FLANN 和聚類Clustering算法。
- ml模塊機(jī)器學(xué)習(xí)模塊(SVM,決策樹,Boosting等等)。
- photo模塊包含圖像修復(fù)和圖像去噪兩部分。
- video模塊針對視頻處理,如背景分離,前景檢測、對象跟蹤等。
- calib3d模塊即Calibration(校準(zhǔn))3D,這個(gè)模塊主要是相機(jī)校準(zhǔn)和三維重建相關(guān)的內(nèi)容。包含了基本的多視角幾何算法,單個(gè)立體攝像頭標(biāo)定,物體姿態(tài)估計(jì),立體相似性算法,3D信息的重建等等。
- G-API模塊包含超高效的圖像處理pipeline引擎
總結(jié)
OpenCV是計(jì)算機(jī)視覺的開源庫
優(yōu)勢:
-
支持多種編程語言
-
跨平臺(tái)
-
活躍的開發(fā)團(tuán)隊(duì)
-
豐富的API
圖像是什么
圖:物體反射或透射光的分布
像:人的視覺系統(tǒng)所接受的圖在人腦中所形版的印象或認(rèn)識(shí)
模擬圖像和數(shù)字圖像
模擬圖像:連續(xù)存儲(chǔ)的數(shù)據(jù),
數(shù)字圖像:分級存儲(chǔ)的數(shù)據(jù)
數(shù)字圖像
位數(shù):圖像的表示,常見的就是8位
分類:二值圖像,灰度圖像和彩色圖像
OpenCV 的模塊
core:最核心的數(shù)據(jù)結(jié)構(gòu)
highgui:視頻與圖像的讀取、顯示、存儲(chǔ)
imgproc:圖像處理的基礎(chǔ)方法
features2d:圖像特征以及特征匹配
總結(jié)
以上是生活随笔為你收集整理的OpenCV_01 简介+无版权安装+模块分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Pytorch神经网络实战案例】27
- 下一篇: php 反射 视频教程,php 实现反射