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