実現したいこと
NumPy配列をcv::UMat型に変換したい。
状況
Base64でエンコードしたJpeg画像をPythonを用いてBase64でデコードした画像を保存する機能を作っています。cv2.cvtColorの第一引数にNumpy配列を渡していますがcv::UMat型である必要があるとエラーが発生しました。Numpy配列をcv::UMat型に変換する方法が思いつかず困っています。
該当のソースコード・エラーメッセージ
Python3
#バイナリデータ <- base64でエンコードされたデータ img_binary = base64.b64decode(img_base64) #バイナリーストリーム <- バリナリデータ img_binarystream = io.BytesIO(img_binary) #PILイメージ <- バイナリーストリーム img_pil = Image.open(img_binarystream) #numpy配列(RGBA) <- PILイメージ img_numpy = np.asarray(img_pil) #numpy配列(BGR) <- numpy配列(RGBA) img_numpy_bgr = cv2.cvtColor(img_numpy, cv2.COLOR_RGBA2BGR)
Shell
img_numpy_bgr = cv2.cvtColor(img_numpy, cv2.COLOR_RGBA2BGR) TypeError: Expected cv::UMat for argument 'src'
ソースコード
Python3
import cv2 import base64 import numpy as np import io from PIL import Image #エンコードされたJpeg画像 target_file=r"D:\Images\replace.txt" #画像保存先 image_file=r"D:\Images\im.jpg" with open(target_file, 'rb') as f: img_base64 = f.read() #バイナリデータ <- base64でエンコードされたデータ img_binary = base64.b64decode(img_base64) #バイナリーストリーム <- バリナリデータ img_binarystream = io.BytesIO(img_binary) #PILイメージ <- バイナリーストリーム img_pil = Image.open(img_binarystream) #numpy配列(RGBA) <- PILイメージ img_numpy = np.asarray(img_pil) #numpy配列(BGR) <- numpy配列(RGBA) img_numpy_bgr = cv2.cvtColor(img_numpy, cv2.COLOR_RGBA2BGR) #表示確認 #cv2.imshow('window title', img_numpy_bgr) #cv2.waitKey(0) #cv2.destroyAllWindows() #画像を保存する場合 cv2.imwrite(image_file,img_numpy_bgr)
試したこと
最初の一回目は保存に成功しましたが、それ以降なぜかエラーが発生するようになりました。
UMatに関して調べてみましたがOpenCVに疎く、理解できずこの度質問させていただきました。
よろしくお願い致します。
まだ回答がついていません
会員登録して回答してみよう