我們上一篇簡要的了解了一下機器學習的演算法基礎,也就是回歸分析,今天我們就來看一看OpenCV的使用,
第三篇
- 一、三維矩陣存盤圖片--在Python中使用OpenCV
- 二、OpenCV讀取圖片
- 三、使用Numpy對影像進行編輯
- 四、OpenCV的卷積核處理
- 使用[3,3]卷積核的結果如下:
- 那么我們也有別的卷積特征提取方式,例如高斯模糊:
一、三維矩陣存盤圖片–在Python中使用OpenCV
在正式講解OpenCV在Python中的使用之前,我們需要了解一個概念,就是使用OpenCV讀取任何圖片均是將其轉化成二維矩陣進行,
例如,讀取一張圖片:

jpg = cv2.imread("1.jpg")
print(jpg.shape)
結果就是:(435, 676, 3),也就是說,圖片被讀取成一個大小為[435,676,3]的矩陣,這是一個三維矩陣,由3個[435,676]的矩陣構成,
例如列印第一個矩陣:
print(jpg[:,:,0])

就是一個[435,676]的矩陣,也可以列印出圖片:
代碼如下:
jpg = cv2.imread("1.jpg")
jpg1 = jpg[:,:,0]
cv2.imshow("jpg1",jpg)
cv2.waitKey()

二、OpenCV讀取圖片
現在,我們就來看一看圖片是怎么以矩陣的形式存盤在介質中的:
例:
img = np.mat(np.zeros((300,300))) # 創建一個長、寬各為300的矩陣,各個點的值為0
cv2.imshow("test",img)
cv2.waitKey()

那么這就是一張一維的黑色圖片,現實生活中,圖片一般由紅(R)、綠(G)、藍(B)三種顏色組成,也就是三原色,因而圖片顯示時,是3通道的(矩陣的第三維即顏色通道),也就是說,我們可以給每一個維度不同的數值,來存盤同一張圖片,
至于想更深入了解三維矩陣存盤圖片的讀者,可以看一看這篇博客:
關于三通道彩色影像的存盤方式理解
那么陣列能不能轉換成矩陣?
當然是可以的:
image = np.mat(np.zeros((300,300)))
imageByteArray = bytearray(image)
print(imageByteArray)
imageBGR = np.array(image).reshape(200,450)
cv2.imshow("cool",imageBGR)
cv2.waitKey()
print(imageByteArray)的結果是:

也就是全黑的意思,
那么轉換成影像就是cv2.imshow("cool",imageBGR)的結果:

我們了解了這些之后,自然也就明白,可以隨機生成一副圖片:
randomByteArray = bytearray(os.urandom(120000))
flatNumpyArray = np.array(randomByteArray).reshape(300,400)
cv2.imshow("cool",flatNumpyArray)
cv2.waitKey()
結果如圖:

這個就是隨機生成的一個120000的陣列,重構成[300,400]的矩陣之后顯示的結果,
三、使用Numpy對影像進行編輯
那么,我們可以不可以定向的改變圖片的顏色?可以:
生成一個像素點10*10的白塊加黑塊:
img = np.zeros((300,300))
img[0:10,0:10] = 255
cv2.imshow("img",img)
cv2.waitKey()
結果:

一行或者一列我們也可以操作:
img = np.zeros((300,300))
img[:,10] = 255
img[10,:] = 255
cv2.imshow("img",img)
cv2.waitKey()

四、OpenCV的卷積核處理
在OpenCV以及日常的影像處理中,卷積核是一種常用的影像處理工具,其主要的方法是通過確定的核塊來檢測影像的某個區域,之后根據所檢測的像素與其周圍存在的像素的亮度差值來改變像素明亮度,
例如還是這張圖為例:

使用[3,3]卷積核的結果如下:
kernel33_D = np.array([[1,1,1],
[1,-8,1],
[1,1,1]]) # 這個核的作用就是減少中心像素的亮度
# 另一個卷積核剛好相反:
kernel33 = np.array([[-1,-1,-1]
,[-1,8,-1],
[-1,-1,-1]]) # 如果亮度差距大,本身影像的中央亮度小,經過卷積核之后,中央像素的亮度增加
import numpy as np
import cv2
from scipy import ndimage
kernel33_D = np.array([[1,1,1],
[1,-8,1],
[1,1,1]]) # 這個核的作用就是減少中心像素的亮度
img = cv2.imread("1.jpg",0)
linghtImg = ndimage.convolve(img,kernel33_D)
cv2.imshow("img",linghtImg)
cv2.waitKey()

那么我們也有別的卷積特征提取方式,例如高斯模糊:
import numpy as np
import cv2
from scipy import ndimage
img = cv2.imread("1.jpg",0)
blurred = cv2.GaussianBlur(img,(11,11),0)
gaussImg = img - blurred
cv2.imshow("img",gaussImg)
cv2.waitKey()
這個是運行結果,還挺好看的:

那么今天的讀書筆記就分享到這里了,我們下次再見!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/421676.html
標籤:AI
