np.ndarray与PIL.Image对象相互转换
Image对象有crop功能,也就是图像切割功能,但是使用opencv读取图像的时候,图像转换为了np.adarray类型,该类型无法使用crop功能,需要进行类型转换,所以使用下面的转换方式进行转换:
numpy.array(img) img对象转化为np数组
Image.fromarray(arr) np数组转化为img对象
将numpy array转换为bytes
问题分析
需要将图片的numpy的array数据转换为bytes,转换之后的bytes数据要等价于open(file,"rb")。在使用numpy的tobytes(等价于tostring)方法发现得到的bytes数据并不等价于open(file,"rb")数据,需要对array数据进行相同的图片格式编码之后,再使用tobytes才行。
import cv2
img_path = "img/test.jpg"
#打开图片文件获取二进制数据
with open(img_path,"rb") as f:
#读取图片的二进制数据
bin_contents = f.read()
#使用opencv读取图片
img = cv2.imread(img_path)
#将numpy的数组转换为bytes(可以跳过这步)
array_bytes = img.tobytes()#或者使用img.tostring()
#对数组