Доступ к LSB и MSB из двоичного 8-битного изображения

#python-3.x #opencv #image-processing #binary #8-bit

Вопрос:

Я работаю над шифрованием, в котором проблема гласит:

Для каждого пикселя изображения преобразуйте десятичное значение пикселя в двоичное 8 бит. Затем разделите MSB и LSB каждого 8-битного пикселя и преобразуйте их в десятичные.

Я преобразовал изображение в 8-битный двоичный файл для каждого пикселя. Теперь я не знаю, как разделить MSB и LSB.

Вот мой код:

 #taking input image
input = cv2.imread('test.webp')
#print("beforenn")
cv2.imshow('image before',input)


#Get input size converting to a fixed size

height, width = input.shape[:2]

#Desired "pixelated" size

w, h = (256, 256)

#Resize input to "pixelated" size

temp = cv2.resize(input, (w, h), interpolation=cv2.INTER_LINEAR)

print(temp)
#Initialize output image

#the converted pixed into 8bit image
output = cv2.resize(temp, (width, height), interpolation=cv2.INTER_NEAREST)
cv2.imwrite("pixelate.jpg", output)
#print(output)
#output
print('afternn')
cv2.imshow('image after',output)



cv2.waitKey(0)

cv2.destroyAllWindows()][1]
 

Ответ №1:

Сначала прочитайте изображение и распечатайте его тип данных

 img = cv2.imread('test.webp')
print(img.dtype)
 

Если тип данных не uint8, то масштабируйте изображение до 0-255 и измените его тип данных на uint8.

Теперь замаскируйте 1-й (LSB) и последний (MSB) бит каждого пикселя

 import numpy as np
mask = np.full(img.shape, 0x7E, dtype=np.uint8)

res = np.bitwise_and(img, mask)

import matplotlib.pyplot as plt
plt.imshow(res)