首頁 > 後端開發 > Python教學 > 當Python也來進行修圖神器,發現是真的蠻好用的呢! !

當Python也來進行修圖神器,發現是真的蠻好用的呢! !

WBOY
發布: 2023-04-13 22:10:01
轉載
1064 人瀏覽過

今天小編來和大家分享一下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(),它的語法格式如下所示

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

當Python也來進行修圖神器,發現是真的蠻好用的呢! !

圖片儲存

最後我們將圖片儲存下來,這裡用到的函數是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):
# 當Python也來進行修圖神器,發現是真的蠻好用的呢! !的正中心的位置来改变像素值,
img[int(x/2) + i, int(y/2) + j] = (0, 0, 0)


cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
登入後複製

output

當Python也來進行修圖神器,發現是真的蠻好用的呢! !

以上是當Python也來進行修圖神器,發現是真的蠻好用的呢! !的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板