图片和二进制流之间的转化
1.图片—>二进制图像矩阵
- 读取图片,并调节图片像素(如(256,256)).
- 获取像素点的颜色(黑色:RGB(0,0,0))
- 转化二进制流写入文件(黑色:1,其余:0)
from PIL import Image
im=Image.open('算法数据/t2.jpg')
im = im.resize((256, 256), Image.NEAREST) # 调节图片大小
r,g,b = im.split()
width,height=im.size
fh=open('2.txt','w')
for i in range(height):
for j in range(width): #获取像素点颜色
color=im.getpixel((j,i))
colorsum=color[0]+color[1]+color[2]
if(colorsum == 0):
fh.write('1')
else:
fh.write('0')
fh.write('\n')
fh.close()
2.二进制图像矩阵—>二进制流
- 读取二进制图像矩阵文件,获取矩阵属性(行和列)
- 将多行矩阵转化为一行
import numpy as np
def open_txt(filename):
fr = open(filename)
width=len(fr.readline().strip("\n"))
height=len(fr.readlines())+1
return width,height
def img2vector(filename,width,height):
fr = open(filename)
binary_stream= np.zeros((1,width*height))
for i in range(height):
lineStr = fr.readline().strip("\n")
for j in range(width):
binary_stream[0,width*i+j] = int(lineStr[j])
return binary_stream
测试:
width,height=open_txt(“2.txt”)
b=img2vector(“2.txt”,width,height)
b
结果:
array([[0., 0., 0., …, 0., 0., 0.]])
3.二进制流—>图片
- 二进制流转化为二进制图像矩阵
- 用二进制图像矩阵绘图
images = b.reshape(256, 256)
print(images)
import matplotlib.pyplot as plt
plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
## 二进制图像矩阵
[[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
...
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 1. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]]
""" 左边原图像 右边二进制流绘制图 """