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 |
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)
当然保存英文路径图片也是没有问题的
#此时的img需要是BGR格式
cv2.imencode('.jpg', img)[1].tofile(picPath+"test.jpg")
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这种格式。
上文中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的