淺談Opencv (上)

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()

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章