图像处理基础


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越大,越远的像素将相互影响