所遇問題
之前都加載的是圖片數(shù)據(jù)绳军,但從網(wǎng)上下載的圖片與原圖有一點點差別,所以拿到圖片的二進制數(shù)據(jù)后再看著蛙,但這數(shù)據(jù)是進行了base64加密的删铃;
數(shù)據(jù)格式
數(shù)據(jù)讀取與顯示
數(shù)據(jù)讀取代碼
import base64
from io import BytesIO
from PIL import Image
# 假設(shè)你有一個Base64編碼的圖像字符串
img_base64 = '/9j/4AAQSkZJRgABAQAAAQABAADk=' # 這里應(yīng)該是完整的Base64編碼字符串
# 解碼Base64字符串
img_data = base64.b64decode(img_base64)
# 使用BytesIO將圖像數(shù)據(jù)轉(zhuǎn)為文件對象
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()
可正常顯示圖片
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'
原因是因為數(shù)據(jù)格式的問題,需進行變換踏堡,加一行image_np = np.array(image)
image_np = np.array(image)
cv.imshow('img_bin', image)
cv.waitKey(0)
cv.destroyAllWindows()
即可顯示圖像