如何在python中获取图像的边界像素?

如何在python中获取图像的边界像素?,python,image,python-2.7,opencv,image-processing,Python,Image,Python 2.7,Opencv,Image Processing,我有一个图像,使用隐写术,我只想用边界像素保存数据 换句话说,我只想将数据保存在图像边界像素的最低有效位SLSB中 有没有办法让边框像素在边框像素中最多存储15个字符的文本? 请帮帮我…获取边界像素: 遮罩操作是获取图像边界像素的多种方法之一。守则如下: a= cv2.imread('cal1.jpg') bw = 20 //width of border required mask = np.ones(a.shape[:2], dtype = "uint8") cv2.rectangle(ma

我有一个图像,使用隐写术,我只想用边界像素保存数据

换句话说,我只想将数据保存在图像边界像素的最低有效位SLSB中

有没有办法让边框像素在边框像素中最多存储15个字符的文本? 请帮帮我…

获取边界像素:

遮罩操作是获取图像边界像素的多种方法之一。守则如下:

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)
在我得到一个与输入图像尺寸相同的1数组后,我使用cv2.rectangle函数来绘制一个由0组成的矩形。第一个参数是要绘制的图像,第二个参数是起点x,y点,第三个参数是终点x,y点。第四个参数是颜色,'-1'表示绘制的矩形的厚度-1填充矩形。您可以找到该函数的文档

现在我们有了掩码,您可以使用“cv2.bitwise_and”文档功能对像素执行和操作。基本上,遮罩中的“1”像素保留其像素值。遮罩中为“0”像素的像素被设为0。这样,您将获得如下输出:

输入图像为:

你现在有边界像素了

使用LSB平面存储您的信息不是一个好主意。当你考虑它的时候,它是有意义的。简单的有损压缩会影响大部分隐藏数据。将图像保存为JPEG会导致信息丢失或严重影响信息。如果您仍想尝试LSB,请查看位平面切片。通过位平面切片,基本上可以获得从图像的MSB到LSB的位平面。来自researchgate.net的图像

我已经在Matlab中完成了,但不太确定是否要在python中完成。在Matlab中,
函数“bitgetimage,1”返回图像的LSB。我发现了一个关于使用python进行位平面切片的问题。虽然没有回答,但您可能希望查看发布的代码

访问边界像素并向其中输入数据。 通过t=img.shape访问图像的形状。它返回行数、列数和通道数的元组。组件为RGB,分别为1、2、3。intr[0]是存储值的变量

import cv2
img = cv2.imread('xyz.png')
t = img.shape
print(t)
component = 2
img.itemset((0,0,component),int(r[0]))
img.itemset((0,t[1]-1,component),int(r[1]))
img.itemset((t[0]-1,0,component),int(r[2]))
img.itemset((t[0]-1,t[1]-1,component),int(r[3]))

print(img.item(0,0,component))
print(img.item(0,t[1]-1,component))
print(img.item(t[0]-1,0,component))
print(img.item(t[0]-1,t[1]-1,component))
cv2.imwrite('output.png',img)

这可能会有帮助-边框像素。。。是否与图像数组的第一行和最后一行/列相同?你觉得这有什么难的?我想只要用numpy切片,你就可以在几秒钟内得到它们。。。。