熱線電話:13121318867

登錄
首頁精彩閱讀當Python也來進行修圖神器,發現是真的蠻好用的呢
當Python也來進行修圖神器,發現是真的蠻好用的呢
2022-07-11
收藏

作者:俊欣

來源:關于數據分析與可視化

今天小編來和大家分享一下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):
        # 圖片的正中心的位置來改變像素值,
        img[int(x/2) + i, int(y/2) + j] = (0, 0, 0)

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

output

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

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢