Opencv (上)
常見的圖片格式:
1、jpg(jpeg) : 用最少的磁盤空間得到較好的圖片質量
2、png: 無損壓縮的位圖片形格式
常見的圖片類型:
【黑白】【彩色】
圖片的本質:
由像素點組成的矩陣,每個元素(像素點)都是在0-255之間
爲什麼每個像素點都是界於0-255之間?
1、位圖模式(黑白圖像) 僅僅只有1位深度的圖像 ->(0,1,1,1,0 …)
0->純黑色
1->純白色
2、灰度圖像:【0,255】
有8位深度的圖像
(0,0,0,0,0,0,0,0,0) ->2**0=1
(1,1,1,1,1,1,1,1,1) ->2**8 = 256 因爲從0開始計數,所以爲255
3、彩色圖像:【0,255】
多了三個通道:RGB (色彩三原色)
一共3個通道,每個通道8個深度 產生256**3個顏色
使用Opencv讀取第一張黑白圖片
import cv2
#所有的路徑必須是英文【存在中文讀取時不報錯,讀取結果位None】
path = r".\timg.jpg"
#path: 路徑 0:代表灰度圖 1;彩色圖
img = cv2.imread(path,0)
#opencv讀進來的形式以什麼樣的形式存在 <class 'numpy.ndarray'>
print(type(img))
#讀取圖片儲存形式 (1280, 1067) [Height,Width]
print(img.shape)
#儲存類型:uint8 ->無符號8位整型(0,1,0,1,0,1,0,1) 255白,0黑
print(img)
確認白色與黑色及圖片顯示
cv2.imshow('image',img)
cv2.waitKey(0)
圖片的裁剪:矩陣的切割
path1 = r"./white.png"
path2 = r"./black.png"
img1 = cv2.imread(path1,0)
img2 = cv2.imread(path2,0)
print(img1.shape,img2.shape)
#numpy疊加
import numpy as np
new_img1 = img1[:100,:130]
new_img2 = img2[:300,:130]
#垂直拼接,列要相等
new_img = np.vstack((new_img1,new_img2))
cv2.imshow('new_img',new_img)
cv2.waitKey(0)
#水平拼接,行要相等
new_img3 = img1[:100,:130]
new_img4 = img2[:100,:150]
new_img = np.hstack((new_img3,new_img4))
cv2.imshow('new_img',new_img)
cv2.waitKey(0)
圖片的保存
#(imwrite(path,target))
cv2.imwrite(r"./newimage.jpg",new_img)
隨機生成圖片
#隨機生成一個數據,彩色圖片
arry1 = np.random.randint(0,255,(700,500,3),dtype='uint8')
cv2.imshow('new_img',arry1)
cv2.waitKey(0)
使用Opencv讀取第一張彩色圖片
path = r".\1.jpg"
img = cv2.imread(path,1) #1爲彩色圖片
print(img.shape) #(Height,Width,3)
cv2.imshow('img',img)
cv2.waitKey(0)
彩色通道的拆分與通道的合併
path = r".\2.jpg"
img = cv2.imread(path,1) #1爲彩色圖片
print(img.shape) #(Height,Width,3)
#拆分方式1
imgB = img[:,:,0]
imgG = img[:,:,1]
imgR = img[:,:,2]
#拆分方式2
b,g,r = cv2.split(img)
#合併拆分結果
image = cv2.merge([b,g,r])
查看某個通道圖片
path = r".\2.jpg"
img = cv2.imread(path,1) #1爲彩色圖
#查看B通道[藍色]
img_B = img.copy()
img_B[:,:,1] = 0
img_B[:,:,2] = 0
cv2.imshow('image',img_B)
cv2.waitKey(0)
色彩空間轉換
1、色彩空間【RGB】
(1) HSV: 更類似於人類感覺的顏色的方式。
H:色相 (Hue)
S:飽和度 (Saturation)
V:亮度(Value)
(2)YUV:Y:亮度信號 U\V:兩個色彩信號,色彩的飽和度
(3) Lab:由國際照明委員會建立。L:整張圖的明亮度 a\b:負責顏色的多少
path = r".\2.jpg"
img = cv2.imread(path,1) #1爲彩色圖
cv2.cvtColor(img,cv2.COLOR_YUV2BGR)
cv2.imshow('image',img)
cv2.waitKey(0)
統計一張圖片像素點個數
import numpy as np
import matplotlib.pyplot as plt
import cv2
path = r".\2.jpg"
img = cv2.imread(path,1) #1爲彩色圖
h,w,g = np.shape(img)
hest = np.zeros([256],dtype=np.int32)
#遍歷圖片矩陣
for row in range(h):
for col in range(w):
pv = img[row,col,1]
hest[pv] = hest[pv] + 1
#繪圖的操作
plt.plot(hest,color='r')
plt.xlim([0,256])
plt.show()