获取边界像素:
遮罩操作是获取图像边框像素的众多方法之一。代码如下:
a= cv2.imread('cal1.jpg')
bw = 20 //width of border required
mask = np.ones(a.shape[:2], dtype = "uint8")
cv2.rectangle(mask, (bw,bw),(a.shape[1]-bw,a.shape[0]-bw), 0, -1)
output = cv2.bitwise_and(a, a, mask = mask)
cv2.imshow('out', output)
cv2.waitKey(5000)
在我得到一个与输入图像具有相同维度的数组后,我使用 cv2.rectangle 函数绘制一个零矩形。第一个参数是您要绘制的图像,第二个参数是开始 (x,y) 点,第三个参数是结束 (x,y) 点。第四个参数是颜色,'-1' 表示绘制矩形的厚度(-1 填充矩形)。您可以找到函数 here 的文档。
现在我们有了掩码,您可以使用“cv2.bitwise_and”(文档)函数对像素执行 AND 操作。基本上发生的情况是,掩码中与“1”像素为“与”的像素保留其像素值。掩码中与“0”像素为 AND 的像素被设为 0。这样您将获得如下输出:
.
输入图像是:
你现在有了边框像素!
使用 LSB 平面来存储您的信息不是一个好主意。当你考虑它时,它是有道理的。一个简单的有损压缩会影响您的大部分隐藏数据。将图像保存为 JPEG 会导致信息丢失或严重影响信息。如果您仍想尝试 LSB,请查看位平面切片。通过位平面切片,您基本上可以获得图像的位平面(从MSB到LSB)。 (图片来自researchgate.net)
我在 Matlab 中做过,不太确定在 python 中做。在 Matlab 中,
函数“bitget(image, 1)”返回图像的 LSB。我发现了一个关于使用 python here 进行位平面切片的问题。虽然没有得到答复,但您可能想查看发布的代码。