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

回答1件
あなたの回答
tips
プレビュー