图片分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()

 

posted @ 2021-11-13 00:07  为红颜  阅读(135)  评论(0编辑  收藏  举报