python使用最低有效位的方法实现二值化图像信息嵌入与提取,最终要显示提取完成的二值化图像
时间: 2024-02-17 18:03:09 浏览: 93
在二值化图像信息嵌入和提取的基础上,如果需要显示提取完成的二值化图像,可以按照以下步骤进行:
1. 在extract_message()函数中,提取出隐藏的消息后,将图像转换为二值化图像。可以使用Pillow库的ImageOps模块中的invert()函数来实现。
```python
from PIL import ImageOps
# ...
def extract_message(img_path):
# ...
# 从RGB通道的最低有效位中提取出每个字符的二进制编码
message = ""
char_count = 0
for y in range(height):
for x in range(width):
r, g, b = pixels[x, y]
if char_count < 8:
char_code = ((r & 0x01) << 7) | ((g & 0x01) << 6) | ((b & 0x01) << 5)
message += chr(char_code)
char_count += 1
else:
# 转换为二值化图像并反转颜色
return ImageOps.invert(img.convert('1'))
# 转换为二值化图像并反转颜色
return ImageOps.invert(img.convert('1'))
```
2. 在调用extract_message()函数时,将返回的Image对象保存为文件并显示出来。
```python
# 提取隐藏的消息并显示提取完成的二值化图像
extracted_img = extract_message("embedded.png")
extracted_img.save("extracted.png")
extracted_img.show()
```
完整的代码示例如下:
```python
from PIL import Image, ImageOps
def embed_message(img_path, message):
# 打开载体图像
img = Image.open(img_path)
pixels = img.load()
width, height = img.size
# 将每个字符的二进制编码嵌入到RGB通道的最低有效位中
char_count = 0
for y in range(height):
for x in range(width):
r, g, b = pixels[x, y]
if char_count < len(message):
char_code = ord(message[char_count])
r = (r & 0xFE) | ((char_code >> 7) & 0x01)
g = (g & 0xFE) | ((char_code >> 6) & 0x01)
b = (b & 0xFE) | ((char_code >> 5) & 0x01)
char_count += 1
pixels[x, y] = (r, g, b)
# 保存修改后的图像
img.save("embedded.png")
def extract_message(img_path):
# 打开含有隐藏信息的图像
img = Image.open(img_path)
pixels = img.load()
width, height = img.size
# 从RGB通道的最低有效位中提取出每个字符的二进制编码
message = ""
char_count = 0
for y in range(height):
for x in range(width):
r, g, b = pixels[x, y]
if char_count < 8:
char_code = ((r & 0x01) << 7) | ((g & 0x01) << 6) | ((b & 0x01) << 5)
message += chr(char_code)
char_count += 1
else:
# 转换为二值化图像并反转颜色
return ImageOps.invert(img.convert('1'))
# 转换为二值化图像并反转颜色
return ImageOps.invert(img.convert('1'))
# 将消息嵌入到图像中并显示嵌入完成的二值化图像
embed_message("source.png", "Hello, World!")
embedded_img = Image.open("embedded.png")
embedded_img.show()
# 提取隐藏的消息并显示提取完成的二值化图像
extracted_img = extract_message("embedded.png")
extracted_img.save("extracted.png")
extracted_img.show()
```
阅读全文