python中cv2.imdecode()與cv2.imencode()的使用小結
cv2.imencode()函數與cv2.imdecode()函數通常用于圖片的編碼與解碼。也可以用于帶中文路徑的圖片讀取,網絡傳輸中的解碼中。
1、圖片路徑帶中文的讀取和寫入
1.1 讀取
- 用cv2.imread()函數讀取帶中文路徑的圖片時,會報錯:
import cv2 img_path = "/home/dataset/狗/101.jpg" img = cv2.imread(img_path)
運行這個代碼會報錯,可使用numpy的fromfile函數將圖片加載成array,然后通過cv2.imdecode解碼:
import numpy as np
import cv2
from PIL import Image
img_path = "/home/dataset/狗/101.jpg"
arr_img = np.fromfile(img_path, dtype=np.uint8) # 將文本或二進制文件中數據構造成數組
img = cv2.imdecode(arr_img, cv2.IMREAD_COLOR) # BGR通道,和cv2.imread()讀圖片一樣
# 轉成Image對象
# rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# pil_img = Image.fromarray(rgb_img)
# 用opencv自帶的顯示函數顯示圖像
cv2.imshow("opencv imgshow", img)
cv2.waitKey()
# 用matplotlib.pyplot顯示圖像
from matplotlib import pyplot as plt
plt.figure("pylot imgshow") # 圖像窗口名稱
plt.imshow(img)
plt.axis('off') # 關掉坐標軸為 off
plt.title('pylot imgshow') # 圖像題目
plt.show()


1.2 寫入
- 用cv2.imwrite()函數將圖片寫入帶中文路徑用于保存圖片時,也會報錯:
import cv2 save_path = "/home/dataset/狗/101.jpg" cv2.imwrite(save_path, img)
我們可以利用cv2.imencode將圖片編碼到內存緩沖區(qū)中,然后利用numpy.tofile方法來寫入文件。
import cv2
import numpy as np
img_path = "/home/dataset/狗/101.jpg"
arr_img = np.fromfile(img_path, dtype=np.uint8) # 將文本或二進制文件中數據構造成數組
img = cv2.imdecode(arr_img, cv2.IMREAD_COLOR) # BGR通道,和cv2.imread()讀圖片一樣
arr_buffer = cv2.imencode('.jpg', img)[1]
# 保存為圖片
save_path = "/home/dataset/狗/101_copy.jpg"
arr_buffer.tofile(save_path) # 保存到文件
# 保存為txt
data_encode = np.array(arr_buffer)
str_encode = data_encode.tostring()
# 緩存數據保存到本地
with open('./img_encode.txt', 'w') as f:
f.write(str_encode)
f.flush
2、在網絡中傳輸圖片
用flask寫接口接收圖片,服務端app.py的接收函數如下:
from flask import Flask, request, jsonify
import numpy as np
import cv2
app = Flask(__name__)
@app.route("/upload_img", methods=['POST'])
def upload_img():
f_obj = request.files.get('file', None)
if f_obj is None:
return jsonify("沒有接收到圖片")
else:
img_data = f_obj.read()
#nparr = np.fromstring(img_data, np.uint8)
nparr = np.frombuffer(img_data, np.uint8) # 兩者均可,建議使用np.frombuffer
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
cv2.imwrite("./received_img.jpg", img)
return jsonify("接收圖片成功")
if __name__ == "__main__":
app.run(host='0.0.0.0', port=9000)
模擬客戶端向upload_img接口發(fā)送圖片:
import requests
import time
upload_img_url = "http://localhost:9000/upload_img"
imgfile = {'file':open('/home/dataset/狗/101.jpg','rb')}
start = time.time()
r = requests.post(upload_img_url, files=imgfile)
end = time.time()
running_time = end - start
print(f"時間消耗: {running_time:.5f} 秒")
print(f"響應內容:{r.text}")到此這篇關于python中cv2.imdecode()與cv2.imencode()的使用小結的文章就介紹到這了,更多相關python cv2.imdecode()與cv2.imencode()內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- python-opencv中的cv2.inRange函數用法說明
- python-opencv 中值濾波{cv2.medianBlur(src, ksize)}的用法
- python opencv檢測直線 cv2.HoughLinesP的實現(xiàn)
- Python實現(xiàn)Opencv cv2.Canny()邊緣檢測
- python opencv鼠標畫矩形框之cv2.rectangle()函數
- Python中cv2.Canny() 函數使用方法
- Python圖片縮放cv2.resize()圖文詳解
- python中cv2.projectPoints的用法小結
- python?cv2.waitKey()函數的使用
- python中cv2.imread()和Image.open()的區(qū)別和聯(lián)系詳解
相關文章
conda虛擬環(huán)境創(chuàng)建和python庫在指定conda虛擬環(huán)境中的安裝全過程
本文介紹了如何在conda中創(chuàng)建和激活虛擬環(huán)境,如何在指定的虛擬環(huán)境中安裝Python庫,以及如何查找已安裝的庫和虛擬環(huán)境2026-03-03
python sklearn包——混淆矩陣、分類報告等自動生成方式
今天小編就為大家分享一篇python sklearn包——混淆矩陣、分類報告等自動生成方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
解決Python爬蟲錯誤之twisted.web.error.SchemeNotSupported: Unsu
這篇文章主要介紹了解決Python爬蟲錯誤之twisted.web.error.SchemeNotSupported: Unsupported scheme: b''問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02

