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