VideoCaptureした画像をバイナリ形式に変換したい
解決済
回答 1
投稿
- 評価 0
- クリップ 0
- VIEW 1,986
前提・実現したいこと
Webカメラから取得した写真をAWSのRekognitionで顔照合をするプログラムを作っています。
発生している問題・エラーメッセージ
opencvのVideoCaptureで得られた画像をAWS APIに投げる際に画像の形式を
numpyからbinaryに変換をしないといけないのですが、うまく変換を行うことができません。
numpy.ndarray.tobytes
上記サイトを参考に変換をしてみたところ、変換後のbinaryが\x00\x00...\x00\x00で
埋め尽くされてしまい中身のない状態となってしまいます。
該当のソースコード
import numpy
import cv2 as cv
cap = cv.VideoCapture(0)
rr,frame = cap.read()
b_frame = numpy.ndarray.tobytes(frame)
"""
Amazon Rekognitionの処理
"""
cap.release()
試したこと
b_frame = io.BytesIO(frame)
も使ってみましたが
<_io.BytesIO object at 0x0000029F4BAFFF68>
となりダメでした。
よろしくお願いいたします。
-
クリップを取り消します
-
質問の評価を上げたことを取り消します
-
質問の評価を下げたことを取り消します
checkベストアンサー
0
numpy.ndarray.tobytesはnumpy配列をbytes形式に変換するものであり、APIで必要とされているのは画像ファイルをbytes形式にしたものであると考えられます。
なので以下の例のようにPILを使ってnumpy配列をpng(もしくはjpeg)形式でio.BytesIOオブジェクトに保存して、それをbytes形式で読み取るという方法はいかがでしょうか。
import numpy as np
import cv2
import io
from PIL import Image
cap = cv.VideoCapture(0)
rr, frame = cap.read()
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # cv2の画像はBGRなのでRGBに変換
image = Image.fromarray(frame)
png = io.BytesIO() # 空のio.BytesIOオブジェクトを用意
image.save(png, format='png') # 空のio.BytesIOオブジェクトにpngファイルとして書き込み
b_frame = png.getvalue() # io.BytesIOオブジェクトをbytes形式で読みとり
"""
Amazon Rekognitionの処理
"""
cap.release()
投稿
score 143
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 87.59%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
ayatsuji_uchu
2019/12/27 10:23
ありがとうございます。