图像的灰度化和二值化

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()

效果展示:
 下图中的第一行的右边是灰度化的结果,第二行是二值化的结果。

猜你喜欢

转载自blog.csdn.net/Exception_3212536934/article/details/125104955