图片分bit显示
1. matlab
X=double(rgb2gray(imread('F:/lena.jpg')));%将原始图像转换为灰度图像,如果本身就是灰度图可以去掉rgb2gray函数 [h w] = size(X); subplot(3,3,1); imshow(X,[]); title('原始图像'); for k=1:8 for i=1:h for j=1:w tmp(i,j) = bitget(X(i,j),k);%bitget函数首先将X(i,j)处灰度值分解为二进制串,然后取第k位 end end subplot(3,3,k+1); imshow(tmp,[]); ind = num2str(k); imti = ['第',ind,'个位平面']; title(imti); end
权重小的bit对于整幅图像作用不大,诸如第一位,权重为1,有或没有只是1的差距,更像是噪声。
2. python
import cv2 import numpy as np img = cv2.imread(r'F:/lena.jpg', cv2.IMREAD_GRAYSCALE) h, w = img.shape[:2] new_img = np.zeros((h,w,8)) for k in range(8): for i in range(h): for j in range(w): n = np.binary_repr(img[i,j],8) new_img[i,j,k] = n[k] cv2.imshow('image',img) cv2.imshow('image8',new_img[:,:,0]) cv2.imshow('image7',new_img[:,:,1]) cv2.imshow('image6',new_img[:,:,2]) cv2.imshow('image5',new_img[:,:,3]) cv2.imshow('image4',new_img[:,:,4]) cv2.imshow('image3',new_img[:,:,5]) cv2.imshow('image2',new_img[:,:,6]) cv2.imshow('image1',new_img[:,:,7]) cv2.waitKey(0) cv2.destroyAllWindows()