首頁 > 軟體

Python OpenCV超詳細講解基本功能

2022-04-01 19:00:54

準備工作

右擊新建的專案,選擇Python File,新建一個Python檔案,然後在開頭import cv2匯入cv2庫。

轉成灰度影象

  • 呼叫imread()方法獲取我們資原始檔夾中的圖片lena.png
  • cvtColor()方法可以讓我們的圖片轉換成任意顏色,第一個引數是我們要轉換的圖片,第二個引數是要轉成的顏色空間,cv2.COLOR_BGR2GRAY就是由BGR變為GRAY,我們日常生活中都是RGB三通道順序,而在OpenCV中是BGR順序。
  • 使用imshow()方法顯示圖片,視窗名稱為Gray Image
  • waitKey(0)這句可以讓視窗一直保持,如果去掉這句,視窗會一閃而過
img=cv2.imread("Resources/lena.png")
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray Image",imgGray)
cv2.waitKey(0)

我們來看下效果:

高斯模糊

  • GaussianBlur()是對圖片進行高斯模糊(也稱為高斯平滑),是去除影象噪聲的一種方法。
  • 第一個引數是影象,第二個引數(7,7)是折積核的大小,只能是奇數長度的矩陣,第三個引數是Sigma X,預設為0
  • imshow()顯示原圖和灰度圖
img=cv2.imread("Resources/lena.png")
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur=cv2.GaussianBlur(imgGray,(7,7),0)
cv2.imshow("Gray Image",imgGray)
cv2.imshow("Blur Image",imgBlur)
cv2.waitKey(0)

我們來看下效果,左為原圖,右是高斯模糊:

邊緣檢測

邊緣檢測Canny()方法中第一個引數是影象,第二個引數是閾值1,第三個引數是閾值2,用來顯示灰度值在此範圍內的邊緣線。

img=cv2.imread("Resources/lena.png")
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur=cv2.GaussianBlur(imgGray,(7,7),0)
imgCanny=cv2.Canny(img,150,200)

cv2.imshow("Gray Image",imgGray)
cv2.imshow("Blur Image",imgBlur)
cv2.imshow("Canny Image",imgCanny)
cv2.waitKey(0)

我們執行看下效果:

膨脹運算

膨脹運算中,會用到numpy庫,我們先匯入一下:import numpy as np定義一下大小為5x5的折積核:kernel=np.ones((5,5),np.uint8),數值型別是無符號整型

kernel=np.ones((5,5),np.uint8)
img=cv2.imread("Resources/lena.png")
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur=cv2.GaussianBlur(imgGray,(7,7),0)
imgCanny=cv2.Canny(img,150,200)
imgDialation=cv2.dilate(imgCanny,kernel,iterations=1)

cv2.imshow("Gray Image",imgGray)
cv2.imshow("Blur Image",imgBlur)
cv2.imshow("Canny Image",imgCanny)
cv2.imshow("Dialation Image",imgDialation)
cv2.waitKey(0)

我們看下效果,膨脹使得邊緣線變得更厚,全部連線到一塊。

腐蝕運算

我們對剛剛膨脹的影象進行腐蝕運算,就可以得到閉合的邊緣影象。

kernel=np.ones((5,5),np.uint8)
img=cv2.imread("Resources/lena.png")
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur=cv2.GaussianBlur(imgGray,(7,7),0)
imgCanny=cv2.Canny(img,150,200)
imgDialation=cv2.dilate(imgCanny,kernel,iterations=1)

cv2.imshow("Gray Image",imgGray)
cv2.imshow("Blur Image",imgBlur)
cv2.imshow("Canny Image",imgCanny)
cv2.imshow("Dialation Image",imgDialation)
cv2.waitKey(0)

從左到右依次為膨脹影象、腐蝕影象、邊緣檢測影象

OK,本節內容也是非常簡單的,主要是讓大家熟悉下OpenCV最基礎的應用。眼過千遍不如手過一遍,快去動手敲一遍吧~


IT145.com E-mail:sddin#qq.com