1、灰度化
RGB模式的图片转化为灰度图的方式:
需要注意的是下图中的第一种处理方法RGB的三个数值要对应,后面的代码用opencv时,图像导入的是BGR,这个时候就要注意乘的数值不要弄错。
2、二值化
二值化就是将RGB值转化为0或者1。
if(img_gray[i,j]<=0.5)
img_gray[i,j]=0
else:
img_gray[i,j]=1
完整代码:
from skimage.color import rgb2gray
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import cv2
#手动灰度化
img = cv2.imread("lenna.jpg")
h,w = img.shape[:2] #获取图片的高和宽
img_gary = np.zeros([h,w],img.dtype) #创建一张和当前图片大小一样的单通道图片
for i in range(h):
for j in range(w):
m = img[i,j] #取出当前高和宽中的BGR坐标
img_gary[i,j] = int(m[0]*0.11 + m[1]*0.59 + m[2]*0.3) #将BGR坐标转化为gray坐标并赋值给新图像
print("image show gray: %s"%img_gary)
cv2.imshow("iamge show gray",img_gary)
plt.subplot(221)
img = plt.imread("lenna.jpg")
plt.imshow(img)
print("-----image lenna-----")
print(img)
#调用opencv灰度化
img_gary = rgb2gray(img)
plt.subplot(222)
plt.imshow(img_gary,cmap='gray')
print("-----image_gray-----")
print(img_gary)
#二值化
img_binary = np.where(img_gary >= 0.5, 1, 0)
print("-----image_binary-----")
print(img_binary)
print(img_binary.shape)
plt.subplot(223)
plt.imshow(img_binary,cmap='gray')
plt.show()
效果展示:
下图中的第一行的右边是灰度化的结果,第二行是二值化的结果。