《OpenCV 轻松入门 面向Python》 学习笔记
将灰度图像中的像素值转换为二进制,然后将二进制的某一比特位上的值进行组合,这种 按照位分解的操作 叫做==“位平面分解”==。
举例:
针对RGB图像,将其R通道的第3个位平面,G通道的第3个位平面,B通道的第3个位平面进行合并,我们称合并后的图像为原RGB图像第个位平面。
用提取矩阵(提取因子),通过与原图像做按位与操作,提取位平面
提取因子是一个二进制为8位的数值。提取因子哪位上的值为1(其他位上全为0), 就可以提取图像像素哪位上的数字。将灰度图像与提取矩阵进行按位与运算,就能提取各个位平面。
比如:
阈值处理
通过就算得到的位平面是一个二值图像, 如果直接将上述得到的位平面直接显示出来,会得到一张近似黑色的图像。因为值为8的灰度像素颜色接近于黑色。要想让8显示为白色,必须要将8处理为255,语句为:
mask = result[:, :, i]>0
image[mask] = 255
mask为:
显示图像
import cv2
import numpy as np
image = cv2.imread("/Users/manmi/Desktop/lena.bmp", 0)
h, w = image.shape
x = np.zeros((h, w, 8), dtype=np.uint8)
for i in range(8):
x[:, :, i] = 2 ** i
r = np.zeros((h, w, 8), dtype=np.uint8)
for i in range(8):
r[:, :, i] = cv2.bitwise_and(image, x[:, :, i])
mask = r[:, :, i] > 0
r[mask] = 255
cv2.imshow(str(i), r[:, :, i])
cv2.waitKey()
cv2.destroyAllWindows()