如何使用cv2删除灰度图像的七个低位

How to remove seven low bits of a grayscale image using cv2

我写了一个脚本来删除七个最低有效位,只保留 gray-scale 8 位图像的每个像素的 MBS。为此,我用 0b10000000 屏蔽了每个像素,但没有得到预期的输出。

import cv2
import numpy as np

imageSource = 'input.jpg'
original_img = cv2.imread(imageSource,cv2.COLOR_BGR2GRAY)
cv2.imshow( "original", original_img )
result = original_img & 0b10000000
cv2.imshow( "out", result )
cv2.imwrite('out.jpg',result)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图:

我的代码输出:

想要的结果:

import cv2
import numpy as np

imageSource = 'input.png'
original_img = cv2.imread(imageSource, cv2.CV_LOAD_IMAGE_GRAYSCALE)
cv2.imshow("original", original_img)
result = original_img & 0b10000000
_, result = cv2.threshold(result, 1, 255, cv2.THRESH_BINARY)
cv2.imshow("out", result)
cv2.imwrite('out.jpg', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

你要的是二值图像(0, 255),所以用阈值函数

所以你基本上想要的所有值都是:

  • 大于 127 (128 = 0b1000000 to 255 = 0b11111111) 为 255,
  • 小于或等于 127 (0 = 0b00000000 to 127 = 0b01111111) 为 0。

您可以避免二进制 AND &,而只需使用 threshold 函数:

_, result = cv2.threshold(result, 127, 255, cv2.THRESH_BINARY)