程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

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

編輯:Python

作者 | 俊欣

來源 | 關於數據分析與可視化

今天小編來和大家分享一下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

圖片保存

最後我們將圖片保存下來,這裡用到的函數是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

往期回顧

太卷了!AI 高數考試正確率81%

這個Python神器能讓你摸半天魚!

2D變身3D,來看英偉達的AI“新”魔法!

如何用 Python 實現景區安防系統?

分享
點收藏
點點贊
點在看

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved