opencv 灰度實驗
- 1. 最大值法
- 2. 平均值法
- 3. 加權均值法
- 4(直接讀取灰度圖)cv2.IMREAD_GRAYSCALE
- 5內置將原圖轉換為灰度圖cv2.cvtColor()
- 6 兩個極端的灰度值
灰度圖與彩色圖最大的不同就是:彩色圖是由R、G、B三個通道組成,而灰度圖只有一個通道,也稱為單通道圖像,所以彩色圖轉成灰度圖的過程本質上就是將R、G、B三通道合并成一個通道的過程。
1. 最大值法
對于彩色圖像的每個像素,它會從R、G、B三個通道的值中選出最大的一個,并將其作為灰度圖像中對應位置的像素值。
代碼如下:
'''灰度處理——最大值法'''#讀取圖像img=cv2.imread(r'./src/1.jpg')#取出圖像的高度,寬度和BGR(顏色)h,w,c=img.shapeimg_gray=np.zeros((h,w),dtype=np.uint8) #構造出和原圖形狀相同的灰度圖# 遍歷原圖像的每個元素for row in range(h):for col in range(w):# 取出原圖形中的BGRb,g,r=img[row,col]# 將bgr的最大值賦值給灰度圖max_value=max(b,g,r)img_gray[row,col]=max_value# 顯示原圖和灰度圖cv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)
步驟:
- 1.讀取原圖像
- 2.獲取原圖像的高度,寬度,和BGR(顏色)
- 3.根據原圖的高度和寬度構建出一個和原圖形狀相同的二維數組,類型dtype=np.uint8
- 4.遍歷原圖像的每個像素點得到每個像素點的BRG
- 5.將每個像素點的BRG進行大小比較找出最大值
- 6.再把這個最大值賦值個與原圖同一個高度和寬度的灰度圖
- 7最后將兩個圖片顯示出來
2. 平均值法
對于彩色圖像的每個像素,它會將R、G、B三個通道的像素值全部加起來,然后再除以三,得到的平均值就是灰度圖像中對應位置的像素值。
代碼如下:
'''灰度處理——均值法'''img=cv2.imread(r"./src/1.jpg")h,w,c=img.shapeimg_gray=np.zeros((h,w),dtype=np.uint8)for row in range(h):for col in range(w):b,g,r=img[row,col]mean_value=(b+g+r)//3img_gray[row,col]=mean_valuecv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)
步驟跟最大值法一樣
3. 加權均值法
對于彩色圖像的每個像素,它會按照一定的權重去乘以每個通道的像素值,并將其相加,得到最后的值就是灰度圖像中對應位置的像素值。本實驗中,權重的比例為: R乘以0.299,G乘以0.587,B乘以0.114,這是經過大量實驗得到的一個權重比例,也是一個比較常用的權重比例。
代碼如下:
'''灰度處理——加權均值法'''img=cv2.imread(r"./src/1.jpg")h,w,c=img.shapeimg_gray=np.zeros((h,w),dtype=np.uint8)for row in range(h):for col in range(w):b,g,r=img[row,col]mean_value=(b*0.229+g*0.599+r*0.144)img_gray[row,col]=mean_valuecv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)
4(直接讀取灰度圖)cv2.IMREAD_GRAYSCALE
代碼如下:
'''灰度處理——內置屬性直接讀取灰度圖'''img_gray=cv2.imread(r'./src/1.jpg',cv2.IMREAD_GRAYSCALE)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)
5內置將原圖轉換為灰度圖cv2.cvtColor()
cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
代碼如下:
'''灰度處理——內置將原圖轉換為灰度圖'''img=cv2.imread(r"./src/1.jpg")img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)cv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)