首頁 > 軟體

Python+OpenCV實現基本的影象處理操作

2022-07-11 14:01:15

今天小編來和大家分享一下Python在影象處理當中的具體應用,那既然是影象處理,那必然要提到opencv模組了,該模組支援與計算機視覺和機器學習相關的眾多演演算法,並且應用領域正在日益擴充套件,大致有以下幾種領域

  • 物體識別:通過視覺以及內部儲存來進行物體的判斷
  • 影象分割
  • 臉部辨識
  • 汽車安全駕駛
  • 人機互動
  • 等等

當然這次小編並不打算將這麼高深的內容,今天就從最基本的opencv模組在影象的基本操作上說起

模組的安裝

模組的安裝我們通過都是通過pip命令來進行的

pip install opencv-python
pip install opencv-contrib-python

圖片的各種操作

學過線性代數的肯定懟矩陣並不感到陌生。影象本質上來說就是矩陣,灰度影象是一個普通的矩陣,而彩色影象就是一個多維矩陣,我們對於影象的操作可以自然地轉換成是對矩陣的操作

讀取影象

首先我們先來讀取影象,呼叫的是cv2.imread()方法,它的語法格式如下

cv2.imread(filename, flag=1)

其中的flag引數是用來設定讀取影象的格式,預設的是1,表示為按照RGB三通道的格式來進行讀取,如果設定成0,則表示以灰度圖單通道的方式來進行讀取,

import cv2
import numpy as np
img=cv2.imread('1.jpg', 0)

展示影象

cv2.imshow(name, img)

其引數解釋分別如下:

  • name: 表示的是展示視窗的名字
  • img: 圖片的矩陣形式

我們嘗試將上面讀取的圖片展示出來,程式碼如下

cv2.imshow("grey_img", img)
## 如果使用了cv2.imshow()函數,下面一定要跟著一個摧毀視窗的函數
cv2.destroyAllWindows()

當我們執行了上述的程式碼之後,可以發現在一瞬間當中圖片彈了出來,但是還沒有等我們看清楚圖片的樣子之後就直接關閉了,原因在於cv2.imshow()函數方法並沒有延時的作用,我們新增一個延時的函數,程式碼如下

import cv2
import numpy as np

img = cv2.imread('1.jpg')
cv2.imshow("grey_img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

output

圖片儲存

最後我們將圖片儲存下來,這裡用到的函數是cv2.imwrite(),它的語法格式如下

cv2.imwrite(imgname, img)

其引數解釋分別如下:

  • imgname: 要儲存的圖片的名字
  • img: 圖片的矩陣形式

範例程式碼如下

import cv2
import numpy as np

img = cv2.imread('1.jpg')
cv2.imshow("grey_img", img)
cv2.waitKey(0)
cv2.imwrite('1.png', img)
cv2.destroyAllWindows()

圖片的各種屬性

有時候我們想要知道圖片的畫素大小,而圖片的本質是矩陣,例如一張1024畫素*960畫素的圖片,就意味著在矩陣當中的行數就是960行,列數是1024列,在opencv模組當中呼叫的shape()函數方法,程式碼如下

import cv2

img = cv2.imread('1.jpg')
print(img.shape[0]) # 行數
print(img.shape[1]) # 列數
print(img.shape[2]) # 通道數

output

308
340
3

可以看到該圖片的畫素是340*380,通道數是3,而針對灰度影象而言,我們來看一下圖片的屬性,程式碼如下

img = cv2.imread('1_grey.png', 0)
print(img.shape)

output

(308, 340)

可以看到對於灰度影象而言,我們就沒有看到通道數,只有行數和列數

影象的基本操作

最後我們來對影象進行一些基本操作,無非就是改變當中的一些畫素值,我們匯入一張空白的圖片,通過修改當中的畫素值來往裡面新增一個黑點,程式碼如下

import cv2
import numpy as np

img = cv2.imread('2.jpg')
(x, y, z) = img.shape

for i in range(-10, 10):
    for j in range(-10, 10):
        # 圖片的正中心的位置來改變畫素值,
        img[int(x/2) + i, int(y/2) + j] = (0, 0, 0)

cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

output

到此這篇關於Python+OpenCV實現基本的影象處理操作的文章就介紹到這了,更多相關Python OpenCV影象處理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


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