Windows(USB)上のホストアプリケーションを介してyuv2形式のデータをストリーミングするqvgaセンサーをインターフェースしています。opencv-python サンプル アプリケーションを使用して、yuv2 形式から生データをストリーミングまたはキャプチャするにはどうすればよいですか。
どうやってやるの?そうするためのテスト例はありますか?
//opencv-python (host appl)
import cv2
import numpy as np
# open video0
cap = cv2.VideoCapture(0, cv2.CAP_MSMF)
# set width and height
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 340)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
# set fps
cap.set(cv2.CAP_PROP_FPS, 30)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Display the resulting frame
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
デコードせずにビデオ フレームを取得するためのコード サンプル:
import cv2
import numpy as np
# open video0
# -------> Try replacing cv2.CAP_MSMF with cv2.CAP_FFMPEG):
cap = cv2.VideoCapture(0, cv2.CAP_FFMPEG)
# set width and height
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 340)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
# set fps
cap.set(cv2.CAP_PROP_FPS, 30)
# Fetch undecoded RAW video streams
cap.set(cv2.CAP_PROP_FORMAT, -1) # Format of the Mat objects. Set value -1 to fetch undecoded RAW video streams (as Mat 8UC1)
for i in range(10):
# Capture frame-by-frame
ret, frame = cap.read()
if not ret:
break
print('frame.shape = {} frame.dtype = {}'.format(frame.shape, frame.dtype))
cap.release()
が機能しない場合cv2.CAP_FFMPEG
は、次のコード サンプルを試してください。
import cv2
import numpy as np
# open video0
cap = cv2.VideoCapture(0, cv2.CAP_MSMF)
# set width and height
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 340)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
# set fps
cap.set(cv2.CAP_PROP_FPS, 30)
# -----> Try setting FOURCC and disable RGB conversion:
#########################################################
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('Y','1','6',' '))
cap.set(cv2.CAP_PROP_CONVERT_RGB, 0)
#########################################################
# Fetch undecoded RAW video streams
cap.set(cv2.CAP_PROP_FORMAT, -1) # Format of the Mat objects. Set value -1 to fetch undecoded RAW video streams (as Mat 8UC1)
for i in range(10):
# Capture frame-by-frame
ret, frame = cap.read()
if not ret:
break
print('frame.shape = {} frame.dtype = {}'.format(frame.shape, frame.dtype))
cap.release()
フレームの形状uint8
を 680x240 に変更し、名前を付けて保存しimg.png
ます。
import cv2
import numpy as np
# open video0
cap = cv2.VideoCapture(0, cv2.CAP_MSMF)
# set width and height
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 340)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
cap.set(cv2.CAP_PROP_FPS, 30) # set fps
# Disable the conversion to BGR by setting FOURCC to Y16 and `CAP_PROP_CONVERT_RGB` to 0.
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('Y','1','6',' '))
cap.set(cv2.CAP_PROP_CONVERT_RGB, 0)
# Fetch undecoded RAW video streams
cap.set(cv2.CAP_PROP_FORMAT, -1) # Format of the Mat objects. Set value -1 to fetch undecoded RAW video streams (as Mat 8UC1)
for i in range(10):
# Capture frame-by-frame
ret, frame = cap.read()
if not ret:
break
cols = 340*2
rows = 240
img = frame.reshape(rows, cols)
cv2.imwrite('img.png', img)
cap.release()
//処理された画像 (ホット オブジェクト)
// リトルエンディアン (テスト)
//CAP_DSHOW でイメージ (キャプチャ) をテストします
// CAP_DSHOW でテスト イメージ (保存)
//680x240 (hand.png)
//680x240 (hand1.png)
//fing プレビュー
//fing.png
//fing.png