3、圖像基本認(rèn)知: RGB 、 Gray 、 HSV等
- Gray****灰度圖
GARY色彩空間(灰度圖像)通常指8位灰度圖,具有256個(gè)灰度級(jí),像素值的范圍是[0,255]。不同數(shù)值表示不同程度的灰色。像素值越低,灰色越深。0表示純黑色,255表示純白色。GARY色彩空間為單通道,所以通常用二維數(shù)組表示一幅灰度圖像。
二值圖像:只有0和255兩種像素值的灰度圖像。
- RBG****圖像
RGB是我們接觸最多的顏色空間,由三個(gè)通道表示一幅圖像,分別為紅色(R),綠色(G)和藍(lán)色(B)。這三種顏色的不同組合可以形成幾乎所有的其他顏色。
OpenCV中通道排序?yàn)?/strong>BGR
B(Blue) 藍(lán)色 取值范圍:[0,255]
G(Green) 綠色 取值范圍:[0,255]
R(Red) 紅色 取值范圍:[0,255]
自然環(huán)境下獲取的圖像容易受自然光照、遮擋和陰影等情況的影響,即對(duì)亮度比較敏感。而RGB顏色空間的三個(gè)分量都與亮度密切相關(guān),即只要亮度改變,三個(gè)分量都會(huì)隨之相應(yīng)地改變,而沒(méi)有一種更直觀(guān)的方式來(lái)表達(dá)。
- HSV
H(Hue) 色調(diào),色相 取值范圍:[0,179]
S(Saturation) 飽和度,色彩純凈度 取值范圍:[0,255]
V(Value) 明度 取值范圍:[0,255]
HSV是一種將RGB色彩空間中的點(diǎn)在倒圓錐體中的表示方法。色相是色彩的基本屬性,就是平常說(shuō)的顏色的名稱(chēng),如紅色、黃色等。飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸變灰,取0-100%的數(shù)值。明度(V),取0-max(計(jì)算機(jī)中HSV取值范圍和存儲(chǔ)的長(zhǎng)度有關(guān))。HSV顏色空間可以用一個(gè)圓錐空間模型來(lái)描述。圓錐的頂點(diǎn)處,V=0,H和S無(wú)定義,代表黑色。圓錐的頂面中心處V=max,S=0,H無(wú)定義,代表白色。
在圖像處理中使用較多的是HSV顏色空間,它比RGB更接近人們對(duì)彩色的感知經(jīng)驗(yàn)。非常直觀(guān)地表達(dá)顏色的色調(diào)、鮮艷程度和明暗程度,方便進(jìn)行顏色的對(duì)比。
- HLS
H(Hue) 色相
L(Lightness) 亮度
S(Saturation) 飽和度
HLS中的L分量為亮度,亮度為100,表示白色,亮度為0,表示黑色;HSV 中的 V 分量為明度,明度為100,表示光譜色,明度為0,表示黑色。
4、通道分離與合并、色域轉(zhuǎn)換、像素運(yùn)算
def ChannelOp():
# 通道分離與合并
img = np.zeros([500,500,3],np.uint8)
print(img.size,img.shape)
# 通道分離,b,g,r
b,g,r = cv2.split(img)
# 將b,g通道中的10:100變成白色255,b+g混合后得到青色
b[10:100,10:100] = 255
g[10:100,10:100] = 255
img1 = cv2.merge((b,g,r))
cv2.imshow('imshow',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
示例
def ConvertColor():
img = cv2.imread("./images/test.jpg")
# 色彩空間
color_space = [cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2RGBA,
cv2.COLOR_BGR2RGB,cv2.COLOR_BGR2HLS,
cv2.COLOR_BGR2HSV,cv2.COLOR_BGR2YUV,
cv2.COLOR_BGR2BGRA]
# 轉(zhuǎn)換
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 二值化處理
# ower_red指的是圖像中低于這個(gè)lower_red的值,圖像值變?yōu)?
# upper_red指的是圖像中高于這個(gè)upper_red的值,圖像值變?yōu)?
# 在lower_red~upper_red之間的值變成255, 其余的為0
lowerb = np.array([100,100,100])
upperb = np.array([200, 200, 200])
mask = cv2.inRange(img,lowerb=lowerb,upperb=upperb)
cv2.imshow('imshow',mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
示例,二值化處理
圖像運(yùn)算
def PixelOp():
img1 = cv2.imread('./images/10.jpg')
img2 = cv2.imread('./images/test.jpg')
# 需要兩張圖片大小格式完全一樣
img1 = cv2.resize(img1,(720,400),interpolation=cv2.INTER_AREA)
img2 = cv2.resize(img2, (720, 400), interpolation=cv2.INTER_AREA)
# 對(duì)應(yīng)位置元素相加,如果大于255則取255
new_img_add = cv2.add(img1,img2)
# 對(duì)應(yīng)位置元素相減,如果小于0則取0
new_img_sub = cv2.subtract(img1,img2)
# 對(duì)應(yīng)位置元素相乘
new_img_mu = cv2.multiply(img1,img2)
# 對(duì)應(yīng)位置元素相除
new_img_di = cv2.divide(img1,img2)
# 圖像融合,按權(quán)重融合
new_img_w = cv2.addWeighted(img1,0.2,img2,0.6,0)
# 與或非,對(duì)應(yīng)元素進(jìn)行異或
# 非:相當(dāng)于255-pixel,異或:兩者相等為0,不等為1
new_img_and = cv2.bitwise_and(img1,img2)
new_img_or = cv2.bitwise_or(img1,img2)
new_img_not = cv2.bitwise_not(img1)
new_img_xor = cv2.bitwise_xor(img1,img2)
cv2.imshow("imshow",new_img_xor)
cv2.waitKey(0)
cv2.destroyAllWindows()
-
matlab
+關(guān)注
關(guān)注
182文章
2960瀏覽量
230045 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
3229瀏覽量
42343 -
OpenCV
+關(guān)注
關(guān)注
29文章
625瀏覽量
41218 -
ruby
+關(guān)注
關(guān)注
0文章
44瀏覽量
3442
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論