圖像灰度化
將彩色圖像轉(zhuǎn)化成為灰度圖像的過程成為圖像的灰度化處理。
彩色圖像中的每個(gè)像素的顏色有R、G、B三個(gè)分量決定,而每個(gè)分量有255中值可取,這樣一個(gè)像素點(diǎn)可以有1600多萬 (255255255)的顏色的變化范用。而灰度圖像是R、G、B三個(gè)分量相同的一種特殊的彩色圖像(R=G=B),其一個(gè)像素點(diǎn)的變化范圍為255種,所以在數(shù)字圖像處理種一般先將各種格式的圖像轉(zhuǎn)變成灰度圖像以使后續(xù)的圖像的計(jì)算量變得少一些?;叶葓D像的描述與彩色圖像一樣仍然反映了整幅圖像的整體和局部的色度和亮度等級(jí)的分布和特征。
平均值法
取R、G、B分量中的均值,公式如下:
G
r
a
y
(
x
,
y
)
=
(
R
(
x
,
y
)
+
G
(
x
,
y
)
+
B
(
x
,
y
)
)
/
3
Gray(x,y)=(R(x,y)+G(x,y)+B(x,y))/3
Gray(x,y)=(R(x,y)+G(x,y)+B(x,y))/3
def grayByaverage(img):
# 獲取圖像高度和寬度
height = img.shape[0]
width = img.shape[1]
# 創(chuàng)建一幅圖像
grayimg = np.zeros((height, width, 3), np.uint8)
# 圖像最大值灰度處理
for i in range(height):
for j in range(width):
# 獲取圖像R G B最大值
gray = (int(img[i,j][0])+int(img[i,j][1])+int(img[i,j][2]))/3
grayimg[i, j] = np.uint8(gray)
return grayimg
最大值法
取R、G、B分量中的最大值,公式如下:
G
r
a
y
(
x
,
y
)
=
m
a
x
(
R
(
x
,
y
)
+
G
(
x
,
y
)
+
B
(
x
,
y
)
)
Gray(x,y)=max(R(x,y)+G(x,y)+B(x,y))
Gray(x,y)=max(R(x,y)+G(x,y)+B(x,y))
def grayByaverage(img):
# 獲取圖像高度和寬度
height = img.shape[0]
width = img.shape[1]
# 創(chuàng)建一幅圖像
grayimg = np.zeros((height, width, 3), np.uint8)
# 圖像最大值灰度處理
for i in range(height):
for j in range(width):
# 獲取圖像R G B最大值
gray = (int(img[i,j][0])+int(img[i,j][1])+int(img[i,j][2]))/3
grayimg[i, j] = np.uint8(gray)
return grayimg
加權(quán)平均法
根據(jù)重要性及其它指標(biāo),將三個(gè)分量以不同的權(quán)值進(jìn)行加權(quán)平均。由于人眼對(duì)綠色的敏感最高,對(duì)藍(lán)色敏感最低,因此,按下式對(duì)RGB三分量進(jìn)行加權(quán)平均能得到較合理的灰度圖像。公式如下:
G
r
a
y
(
x
,
y
)
=
0.11
R
(
x
,
y
)
+
0.59
G
(
x
,
y
)
+
0.30
B
(
x
,
y
)
Gray(x,y)=0.11R(x,y)+0.59G(x,y)+0.30B(x,y)
Gray(x,y)=0.11R(x,y)+0.59G(x,y)+0.30B(x,y)
def grayByWeightedaverage(img):
# 獲取圖像高度和寬度
height = img.shape[0]
width = img.shape[1]
# 創(chuàng)建一幅圖像
grayimg = np.zeros((height, width, 3), np.uint8)
for i in range(height):
for j in range(width):
# 獲取圖像R G B最大值
gray = 0.30 * img[i, j][0] + 0.59 * img[i, j][1] + 0.11 * img[i, j][2]
grayimg[i, j] = np.uint8(gray)
return grayimg
三種灰度化結(jié)果如下:
結(jié)果分析:
三種灰度圖像中,最大值法獲得的灰度圖較亮;加權(quán)平均值法獲得的灰度圖柔和,平均值獲得的灰度圖暗處較其他的顏色更深。
整體代碼文章來源:http://www.zghlxwxcb.cn/news/detail-550084.html
import cv2
import numpy as np
import matplotlib.pyplot as plt
#圖像灰度化
#最大值法
def grayBymax(img):
# 獲取圖像高度和寬度
height = img.shape[0]
width = img.shape[1]
# 創(chuàng)建一幅圖像
grayimg = np.zeros((height, width, 3), np.uint8)
# 圖像最大值灰度處理
for i in range(height):
for j in range(width):
# 獲取圖像R G B最大值
gray = max(img[i,j][0], img[i,j][1], img[i,j][2])
grayimg[i, j] = np.uint8(gray)
return grayimg
def grayByaverage(img):
# 獲取圖像高度和寬度
height = img.shape[0]
width = img.shape[1]
# 創(chuàng)建一幅圖像
grayimg = np.zeros((height, width, 3), np.uint8)
# 圖像最大值灰度處理
for i in range(height):
for j in range(width):
# 獲取圖像R G B最大值
gray = (int(img[i,j][0])+int(img[i,j][1])+int(img[i,j][2]))/3
grayimg[i, j] = np.uint8(gray)
return grayimg
def grayByWeightedaverage(img):
# 獲取圖像高度和寬度
height = img.shape[0]
width = img.shape[1]
# 創(chuàng)建一幅圖像
grayimg = np.zeros((height, width, 3), np.uint8)
for i in range(height):
for j in range(width):
# 獲取圖像R G B最大值
gray = 0.30 * img[i, j][0] + 0.59 * img[i, j][1] + 0.11 * img[i, j][2]
grayimg[i, j] = np.uint8(gray)
return grayimg
if __name__ == '__main__':
img = cv2.imread('miao.jpg')
opencv_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
grayByaverage=grayByaverage(img)
grayBymax=grayBymax(img)
grayByWeightedaverage=grayByWeightedaverage(img)
# # 顯示圖像
# cv2.imshow("src", img)
# cv2.imshow("gray", opencv_gray)
# # 等待顯示
# cv2.waitKey(0)
# cv2.destroyAllWindows()
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.figure(figsize=(80, 80))
plt.rcParams['font.sans-serif'] = [
'FangSong'] # 支持中文標(biāo)簽
fig, ax = plt.subplots(2, 2)
ax[0, 0].imshow(imgRGB)
ax[0, 1].imshow(grayByaverage)
ax[1, 0].imshow(grayBymax)
ax[1, 1].imshow(grayByWeightedaverage)
ax[0, 0].title.set_text("原圖")
ax[0, 1].title.set_text("平均值法")
ax[1, 0].title.set_text("最大值法")
ax[1, 1].title.set_text("加權(quán)平均值法")
ax[0,0].axis("off")
ax[0,1].axis("off")
ax[1,0].axis("off")
ax[1,1].axis("off")
fig.tight_layout()
plt.savefig("gray.jpg")
plt.show()
參考文章
圖像處理中的灰度化、二值化文章來源地址http://www.zghlxwxcb.cn/news/detail-550084.html
到了這里,關(guān)于圖像處理之圖像灰度化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!