OpenCV:讀取與寫入圖片

2020-10-12 13:00:16

1.讀取圖片

cv2.imread(filename, flags):

-filename: 檔名稱
-flags: 0 讀入灰度圖片,1 讀入彩色圖片

cv2.imshow(winname, mat):

 -winname: 視窗名字
 -mat: 要展示的圖片矩陣

cv2.waitKey(0):暫停程式,這樣才能顯示圖片

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

在這裡插入圖片描述

2.圖片寫入

讀取圖片要經歷四個步驟:

1.檔案的讀取
2.封裝格式解析(jpg,png等格式)
3.資料解碼
4.資料載入

這樣讀取的圖片為圖片的原始資料

cv2.imwrite(filename, img):

-filename: 圖片名稱
-img: 圖片資料
import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('img1.jpg', img)
True

2.1影象品質

1.jpg圖片檔案是以圖片品質為代價進行壓縮的,屬於有失真壓縮

cv2.IMWRITE_JPEG_QUALITY: 表示當前的圖片品質,壓縮範圍為0-100,不同壓縮比對應不同的圖片大小,下面我們來體驗一下:

import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 0])
True

原影象如下:
在這裡插入圖片描述

圖片大小為400kb

壓縮之後的圖片為:

在這裡插入圖片描述

圖片大小為40kb, 同時出現了嚴重的馬賽克現象

import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest2.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 50])

True

壓縮之後的圖片為:

在這裡插入圖片描述

圖片大小為200kb,馬賽克現象沒那麼的嚴重

2.png圖片格式的壓縮屬於無失真壓縮,可以設定透明度

import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest1.png', img)

True
import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest2.png', img, [cv2.IMWRITE_PNG_COMPRESSION, 0])

True

壓縮之後的影象為:

在這裡插入圖片描述

圖片大小為:5.92MB

import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest3.png', img, [cv2.IMWRITE_PNG_COMPRESSION, 50])

True

影象大小變為2.34MB

由此可知,jpg圖片檔案影象品質的數值越低,壓縮比越高,png圖片檔案影象品質的數值越低,壓縮比越低

3.畫素

畫素:是指組成影象的小方格

RGB: 每一種顏色都是由RGB(red, green, blue)三種顏色組合而成的

顏色深度:比如,8bit 表示每種顏色的範圍是0~255, 所以總共有256^3中顏色

影象寬高:表示在水平方向和豎直方向的畫素點的個數

未壓縮圖片的計算方法: w * h * 顏色通道(3) * 8 bit / 8(B)

3.1畫素讀取與寫入

每一個畫素點都有3各部分組成,一般情況下,圖片儲存的格式為RGB, 但是opecv讀取的圖片為BGR格式

我們將圖片的左上角的一列變為藍色

import cv2
img = cv2.imread('img.jpg', 1)
(b, g, r) = img[100, 100] # 讀取畫素值
print(b, g, r)
#10,100 --- 110, 100
for i in range(1, 1000):
    img[10 + i][100] = (255, 0, 0)
cv2.imshow('imageBlue.png', img)
cv2.waitKey(0)

59 54 129






True

在這裡插入圖片描述