影象處理基礎
阿新 • • 發佈:2021-11-11
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越大,越遠的畫素將相互影響