1. 程式人生 > 其它 >影象處理基礎

影象處理基礎

1.影象基礎

  • 二值圖:只有2種取值
  • 灰度:對8位灰度圖,有256種灰度級取值
  • RGB:真彩色:R,G,B通道各有8位;假彩色:8位表示256種顏色

2.通道分離與合併

b, g, r = cv.split(img)
img_new = cv.merge([b, g, r])

3.彩色圖轉灰度圖

img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

4.二值化影象

_, img_bin = cv.threshold(img_gray, th1, th2, cv.THRESH_BINARY)
#ignore,img_bin = cv.threshold(gray2, 125, 255, cv.THRESH_BINARY)
#ignore,img_bin = cv.threshold(gray2, 125, 1, 0)

5.影象運算

  • 相加:混合影象、新增噪聲
  • 相減:消除背景、差影法(比較差異、運動跟蹤)
  • 相乘:逐元素相乘 掩膜(mask)
  • 相除:校正裝置、比較差異
img = cv.add(img1, img2)
img = cv.addWeighted(img1, alpha, img2,  beta, gamma)
#img1*aplah img2*beta  總體偏移值:gamma
img = cv.subtract(img1, img2)
img = cv.multiply(img1, img2)
img 
= cv.divide(img1, img2)

6.影象的線性和非線性變換

線性變換:s = b + kr

img = cv.convertScaleAbs(img, alpha=2, beta=20)
#alpha相當於k,beta相當於b

非線性變換:

  s = a + ln(r+1)/b

  s = cr^gamma

img4 = 10 + np.log(img.astype(np.float32) + 1) / 0.1
#伽馬變換
img01 = img / 255#將圖片放縮到0-1之間
img05 = np.power(img01, 0.5) * 255#指數0.5
img15 = np.power(img01, 1.5) * 255#
指數1.5 show(np.hstack([img05, img, img15])) #指數<1,圖片更亮 指數>1,圖片更暗

7.影象融合

8. 影象模糊

#卷積
cv.filter2D(img, -1, kernel)
#均值模糊
cv.blur(img, -1, (5,5))
cv.boxFilter(img, -1, (5,5))
#中值濾波
cv.medianBlur(img,3)
#高斯濾波
cv.GaussianBlur(img, (5,5), sigma)#sigma:方差
#sigma太小與原圖區別不大,sigma太大與均值濾波後的結果區別不大
#雙邊濾波
#保留邊緣等高頻資訊,平滑顏色(灰度)相近的地方
cv.bilateralFilter(img, -1, sigmaColor=50, sigmaSpace=3)
# sigmaColor越大,表明該畫素鄰域內有越寬廣的顏色會被混合到一起
#sigmaSpace越大,越遠的畫素將相互影響