所遇问题
之前都加载的是图片数据,但从网上下载的图片与原图有一点点差别,所以拿到图片的二进制数据后再看,但这数据是进行了base64加密的;
数据格式
image.png数据读取与显示
数据读取代码
import base64
from io import BytesIO
from PIL import Image
# 假设你有一个Base64编码的图像字符串
img_base64 = '/9j/4AAQSkZJRgABAQAAAQABAADk=' # 这里应该是完整的Base64编码字符串
# 解码Base64字符串
img_data = base64.b64decode(img_base64)
# 使用BytesIO将图像数据转为文件对象
img_bytes = BytesIO(img_data)
# 使用PIL读取图像
image = Image.open(img_bytes)
# 显示图像
plt.imshow(image)
plt.savefig('./img_bin.jpeg') # plt.imsave('./img_bin.jpeg', image) 这个保存出来的图片不对
plt.show()
可正常显示图片
image.png
cv读取时报错及修改
cv.imshow('img_bin', image)
cv.waitKey(0)
cv.destroyAllWindows()
报错信息如下:
cv.imshow('img_bin', image)
cv2.error: OpenCV(4.6.0) :-1: error: (-5:Bad argument) in function 'imshow'
> Overload resolution failed:
> - mat is not a numpy array, neither a scalar
> - Expected Ptr<cv::cuda::GpuMat> for argument 'mat'
> - Expected Ptr<cv::UMat> for argument 'mat'
原因是因为数据格式的问题,需进行变换,加一行image_np = np.array(image)
image_np = np.array(image)
cv.imshow('img_bin', image)
cv.waitKey(0)
cv.destroyAllWindows()
即可显示图像
image.png
网友评论