opencv读写和保存中文路径图片及base64与图片互转

本文介绍了使用OpenCV在Python中读取和保存包含中文路径的图片,处理BGR到RGB格式,以及图片与Base64编码的转换方法。重点展示了如何正确处理文件路径和编码,适合前端后端交互中的图片处理需求。
摘要由CSDN通过智能技术生成


有几点要注意

cv2.imread(filename,flags)
cv2.imwrite(filename,img)
cv2.imdecode(data,flags)
cv2.imencode(ext,img)

flags有几点(这里只列3点):

含义数值
cv2.IMREAD_UNCHANGED保持原格式不变-1
cv2.IMREAD_GRAYSCALE将图像调整为单通道的灰度图0
cv2.IMREAD_COLOR将图像调整为三通道的BGR图像,默认是该值1

1、opencv读取中文路径图片

import cv2
import numpy as np


img_data = np.fromfile(图片.jpg, np.uint8)
img = cv2.imdecode(img_data, -1)     # 此法可读取中文路径图片,读取后为BRG模式
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

2、opencv保存中文路径图片

当然保存英文路径图片也是没有问题的

#此时的img需要是BGR格式
cv2.imencode('.jpg', img)[1].tofile(picPath+"test.jpg")

3、图片转base64

import base64
data1 = base64.b64encode(open('dog.jpg','rb').read())
#以下两种方法都行
#data2 = str(data1, encoding='utf-8')
data2 = data1.decode('utf-8')

data1是字节,data2是字符串,如果需要保存可以看以下保存和读取代码:

with open('test1.txt','wb') as f:
    f.write(data1)
with open('test2.txt','w') as f:
    f.write(data2)

with open('test1.txt','rb') as f:
    data11 = f.read()
with open('test2.txt','r') as f:
    data22=f.read()

以上data1和data2都是正确的,但在前后端交互时,前端传来的数据是data2这种格式。

4、base64转图片

上文中data1和data2解码后结果相同

import base64
im1 = base64.b64decode(data1)
im2 = base64.b64decode(data2)
#im1==im2

img11 = cv2.imdecode(np.asarray(bytearray(im1),dtype=np.uint8),-1)
img12 = cv2.imdecode(np.frombuffer(im1,dtype=np.uint8),-1)
np.testing.assert_almost_equal(img11,img12)

img21 = cv2.imdecode(np.asarray(bytearray(im2),dtype=np.uint8),-1)
img22 = cv2.imdecode(np.frombuffer(im2,dtype=np.uint8),-1)

np.testing.assert_almost_equal(img21,img22)
np.testing.assert_almost_equal(img11,img21)
#以上四行说明全部相同

img4=cv2.imread('dog.jpg',-1)#读取原图方法1
np.testing.assert_almost_equal(img4,img11)
img5=cv2.imdecode(np.fromfile('dog.jpg',np.uint8),1)#读取原图方法2
np.testing.assert_almost_equal(img4,img5)

以上用不同的方式来读取图像,所得结果全部一样,得到图片,可以进行保存,有两种保存方式:

#第一种
cv2.imwrite('dog1.jpg',img11)
#第二种
with open('dog2.jpg','wb') as f:
    f.write(im2)  #im1==im2的

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值