参考链接: 使用OpenCV在Python中进行图像处理
在上一篇中记录了,如何配置opencv环境的问题。本篇则记录对灰度图像进行一些常规处理。
一张图片是由像素点矩阵构成,我们对图片进行操作即为对图片的像素点矩阵进行操作。我们只要在这个像素点矩阵中找到这个像素点的位置,比如第x行,第y列,所以这个像素点在这个像素点矩阵中的位置就可以表示成(x,y),因为一个像素点的颜色由红、绿、蓝三个颜色变量表示(R,G,B),所以我们通过给这三个变量赋值,来改变这个像素点的颜色。
1.读入正常图像并进行灰度化处理
#读入原始图像
img=cv2.imread('test.jpg')
#灰度化处理
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
图片的灰度化:将一个像素点的三个颜色变量相等,R=G=B,此时该值称为灰度值
直接调用opencv中的函数,读入的图片可以与代码文件放在一起这样可以省略输入图片路径。
2.对灰度图像进行二值化处理
#二值化处理
ret,im_fixed=cv2.threshold(gray,50,255,cv2.THRESH_BINARY)
二值化处理:将一个像素点的值突出为0,255,使得图片呈现黑白两种颜色。在灰度图像中像素值在0~255,二值化后图像中像素值为0或255。
CV_THRESH_BINARY, //表示如果当前像素点的灰度值大于阈值则将输出图像的对应位置像素值置为255,否则为0
3.对灰度图像进行伽马变换
#伽马变换
gamma=copy.deepcopy(gray)
rows=img.shape[0]
cols=img.shape[1]
for i in range(rows):
for j in range(cols):
gamma[i][j]=3*pow(gamma[i][j],0.8)
伽马变换:用来图像增强,提升了暗部细节,简单来说就是通过非线性变换,让图像从暴光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫正。
伽马值小于1时,会拉伸图像中灰度级较低的区域,同时会压缩灰度级较高的部分
伽马值大于1时,会拉伸图像中灰度级较高的区域,同时会压缩灰度级较低的部分
4.对灰度图像进行对数变换
# 对数变换
logc = copy.deepcopy(gray)
for i in range(rows):
for j in range(cols):
logc[i][j] = 3 * math.log(1 logc[i][j])
对数变换:由于对数曲线在像素值较低的区域斜率大,在像素值较高的区域斜率较小,所以图像经过对数变换后,较暗区域的对比度将有所提升。可用于增强图像的暗部细节。(下图太黑了,新手没调好...仔细看还是有一个轮廓的,将就一下--)
5.对灰度图像进行反色变换
#补色变换
cover=copy.deepcopy(gray)
for i in range(rows):
for j in range(cols):
cover[i][j]=255-cover[i][j]
反色变换:对原图像像素值的颜色进行反转,即黑色变为白色,白色变为黑色。