溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中opencv的使用方法是什么

發(fā)布時(shí)間:2020-08-05 11:51:08 來(lái)源:億速云 閱讀:309 作者:小新 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)python中opencv的使用方法是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

OpenCV是一個(gè)旨在解決計(jì)算機(jī)視覺(jué)問(wèn)題的Python庫(kù)。OpenCV最初由Intel在1999年開(kāi)發(fā),但是后來(lái)由Willow Garage資助。它支持很多編程語(yǔ)言,如C++,Python,Java等等。它也支持多種平臺(tái),包括Windows,Linux和MacOS。

OpenCV Python只是一個(gè)與Python一起使用的原始C++庫(kù)的包裝類。通過(guò)使用它,所有OpenCV數(shù)組結(jié)構(gòu)都能被轉(zhuǎn)化為NumPy數(shù)組或從NumPy數(shù)組轉(zhuǎn)化而來(lái)。這樣就可以輕松地將其與其他使用NumPy的庫(kù)集成。例如,SciPy和Matplotlib等庫(kù)。

OpenCV的基礎(chǔ)操作?

Opencv能完成以下從加載圖像到調(diào)整大小等基本操作:

使用OpenCV加載圖片

查看圖片形狀/分辨率

顯示圖片

調(diào)整圖像大小

1. 使用OpenCV加載圖片

Import cv2  
 # colored Image  
Img = cv2.imread ("Penguins.jpg",1)  
 # Black and White (gray scale)  
Img_1 = cv2.imread ("Penguins.jpg",0)

如以上代碼所示,第一個(gè)要求是導(dǎo)入OpenCV模塊。

之后,我們可以用imread模塊讀取圖片。參數(shù)中的1代表這是一個(gè)彩色圖片。如果這個(gè)參數(shù)的值是0,就意味著這個(gè)將被導(dǎo)入的圖片是黑白圖片。這里的圖片名稱是“Penguins”。很簡(jiǎn)單吧?

2. 查看圖片形狀/分辨率

我們可以使用shape子函數(shù)來(lái)輸出圖片的形狀。看看以下代碼:

Import cv2  
# Black and White (gray scale)  
Img = cv2.imread ("Penguins.jpg",0)  
Print(img.shape)

對(duì)于圖片的形狀,我們指的是NumPy數(shù)組的形狀。執(zhí)行代碼之后你將會(huì)看到這個(gè)矩陣由768行和1024列組成。

3. 顯示圖片

使用OpenCV顯示圖片非常簡(jiǎn)單和直接。思考以下圖片:

import cv2  
 
# Black and White (gray scale)  
Img = cv2.imread ("Penguins.jpg",0)  
cv2.imshow("Penguins", img)  
 
cv2.waitKey(0)  
# cv2.waitKey(2000)  
cv2.destroyAllWindows()

正如你所見(jiàn),我們首先使用imread導(dǎo)入圖片。我們需要一個(gè)輸出窗口來(lái)顯示這個(gè)圖片,對(duì)吧? 

然后,我們等待用戶事件。waitKey使窗口保持靜態(tài)直到用戶按下一個(gè)鍵。傳入的參數(shù)是以毫秒為單位的時(shí)間。

最后,我們根據(jù)waitForKey的參數(shù)使用destroyAllWindows關(guān)閉窗口。

4. 調(diào)整圖像大小

類似地,調(diào)整圖像大小非常簡(jiǎn)單。 這里有另一個(gè)代碼段:

import cv2  
# Black and White (gray scale)  
img = cv2.imread ("Penguins.jpg",0)  
resized_image = cv2.resize(img, (650,500))  
cv2.imshow("Penguins", resized_image)  
cv2.waitKey(0)  
cv2.destroyAllWindows()

這里,resize函數(shù)用于將圖像大小調(diào)整為所需的形狀。這里的參數(shù)是新調(diào)整大小后的圖像的形狀。

與之前的代碼相比,剩下的代碼非常簡(jiǎn)單,對(duì)嗎?

我相信你們對(duì)企鵝很好奇,這是我們想要輸出的圖片!

這是另一個(gè)向resize函數(shù)傳遞參數(shù)的方法。看看下面的表示方法:

Resized_image = cv2.resize(img, int(img.shape[1]/2), int(img.shape[0]/2)))

這里,我們得到的新圖像大小是原始圖像的一半。

使用OpenCV進(jìn)行人臉檢測(cè)

這看起來(lái)很復(fù)雜,但實(shí)際上很容易。 讓我?guī)懔私庹麄€(gè)過(guò)程,然后你也會(huì)有同樣的感受。

第一步:想一想我們的先決條件。我們首先需要一個(gè)圖像。然后,我們需要?jiǎng)?chuàng)建一個(gè)級(jí)聯(lián)分類器,它最后會(huì)給我們提供面部特征。

第二步:這一步要使用到OpenCV讀取圖像和特征文件。所以這個(gè)時(shí)候,原始數(shù)據(jù)點(diǎn)是NumPy數(shù)組的形式。

我們要做的就是搜索面部 NumPy n維數(shù)組的行和列的值。這是具有面部矩形坐標(biāo)的數(shù)組。

第三步:最后一步是使用矩形面框顯示圖像。

看看下面的圖片,這里我以圖片的形式總結(jié)了上述的三個(gè)步驟以便于閱讀:

非常直接明了,對(duì)吧?

python中opencv的使用方法是什么

首先,如之前所述,我們創(chuàng)建CascadeClassifier對(duì)象來(lái)提取面部特征。包含面部特征的XML文件路徑是此處的參數(shù)。

下一步是讀取一個(gè)包含面部的圖片,并且使用COLOR_BGR2GREY將其轉(zhuǎn)化為黑白圖片。接下來(lái),我們搜索圖像的坐標(biāo)。這是使用detectMultiScale來(lái)實(shí)現(xiàn)的。

你問(wèn)什么坐標(biāo)?它是面部矩形的坐標(biāo)。scaleFactor被用來(lái)減小5%的形狀值,直到找到面部。因此,總的來(lái)說(shuō),值越小,準(zhǔn)確度越高。

最后,這張臉被顯示到窗口。

給識(shí)別的人臉添加矩形面框

這個(gè)邏輯很簡(jiǎn)單——就像使用for循環(huán)語(yǔ)句一樣簡(jiǎn)單??纯聪旅娴膱D片:

python中opencv的使用方法是什么

我們通過(guò)傳遞參數(shù)(比如圖片對(duì)象,輪廓框的RGB值和矩形的寬度),使用cv2.rectangle來(lái)定義方法以創(chuàng)建一個(gè)矩形。

讓我們來(lái)看看面部檢測(cè)的完整代碼:

import cv2  
# Create a CascadeClassifier Object  
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")  
# Reading the image as it is  
img = cv2.imread("photo.jpg") 
# Reading the image as gray scale image  
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
# Search the co-ordintes of the image  
faces = face_cascade.detectMultiScale(gray_img, scaleFactor = 1.05,  minNeighbors=5)  
for x,y,w,h in faces:  
    img = cv2.rectangle(img, (x,y), (x+w,y+h),(0,255,0),3)  
resized = cv2.resize(img, (int(img.shape[1]/7),int(img.shape[0]/7)))   
cv2.imshow("Gray", resized)  
cv2.waitKey(0)  
cv2.destroyAllWindows()

關(guān)于python中opencv的使用方法是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI