代码地址:https://github.com/Chakid/ImageProcess
一张图片是由像素点矩阵构成,我们对图片进行操作即为对图片的像素点矩阵进行操作。我们只要在这个像素点矩阵中找到这个像素点的位置,比如第x行,第y列,所以这个像素点在这个像素点矩阵中的位置就可以表示成(x,y),因为一个像素点的颜色由红、绿、蓝三个颜色变量表示(R,G,B),所以我们通过给这三个变量赋值,来改变这个像素点的颜色。
2.1 图片的灰度化:
灰度化:将一个像素点的三个颜色变量相等,R=G=B,此时该值称为灰度值
直接调用opencv中的函数,读入的图片可以与代码文件放在一起这样可以省略输入图片路径。
代码实现:
# coding:utf-8
'''''
读入正常图像并进行灰度化处理
'''
import cv2
#读入原始图像
img=cv2.imread(r'img/cxk.jpg')
#灰度化处理
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('src', img)
cv2.imshow('convert', gray)
cv2.waitKey()
cv2.destroyAllWindows()
运行效果:
2.2对灰度图像进行二值化处理
二值化处理:将一个像素点的值突出为0,255,使得图片呈现黑白两种颜色。在灰度图像中像素值在0~255,二值化后图像中像素值为0或255。
CV_THRESH_BINARY, //表示如果当前像素点的灰度值大于阈值则将输出图像的对应位置像素值置为255,否则为0
代码实现:
# coding:utf-8
'''
读入正常图像并进行灰度化处理
'''
import cv2
import matplotlib.pyplot as plt
#读入原始图像
img=cv2.imread(r'img/cxk.jpg')
#二值化处理
ret,thresh1=cv2.threshold(gray,50,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret,thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
titles = ['Original','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img,thresh1,thresh2,thresh3,thresh4,thresh5]
for i in range(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()
运行效果: