産業用UVCカメラのすすめ 産業用UVCカメラのすすめ

YUY2とYUYVについて

目的、概要

これらのカラーフォーマットは、フォーマット名は異なりますが、メモリー上のデータの並びは以下の通り同じように並んでいます。

YUY2(メモリー上のデータの並び:Y、U、Y、V)
YUYV(メモリー上のデータの並び:Y、U、Y、V)

Y 輝度信号
U 色差信号(Cb)
V 色差信号(Cr)

UVCカメラではYUY2(もしくはYUYV)に設定できるカメラとできないカメラ、またそれらのカラーフォーマットで画像を取得する各種アプリケーションが存在しています。それらのアプリケーションでカメラを動作させようとすると、カメラから出力されるカラーフォーマットをYUY2(もしくはYUYV)に設定するか、任意に変換しなければなりません。

産業用UVCカメラがYUY2(もしくはYUYV)に対応している場合

DFK33Uシリーズは、YUY2のカラーフォーマットで画像出力可能です。Linuxの場合は「tcam-ctrl -c <serial>」で設定可能なフォーマットを確認してみましょう。YUY2が設定できれば以下のgstreamerのパイプラインでYUY2の画像を取得できます。

gst-launch-1.0 tcambin !  video/x-raw,format=YUY2, width=1440, height=1080,framerate=30/1 ! videoconvert ! ximagesink

その他PythonやC#、C++のプログラムにてカラーフォーマットを直接指定することができます。

産業用UVCカメラがYUY2(もしくはYUYV)に対応していない場合

TheImagingSource社のカメラでは、YUY2のカラーフォーマットに対応していない(=YUY2フォーマットで出力ができない)カメラがあります(37Uシリーズ、USB2カメラ)。上記と同じようにLinuxの場合は「tcam-ctrl -c <serial>」で設定可能なフォーマットを確認してみましょう。アプリケーション側がYUY2(もしくはYUYV)で待ち受けている場合は、カメラから出力される画像をYUY2やYUVYに変換してアプリケーション側に引き渡す必要があります。それぞれ以下2通りの方法があります。

Gstreamerのパイプラインの中でYUY2に変換してしまう方法

GstreamerでBGRxでカラー画像取得し、videoconvert後にYUY2に変換します。

tcambin ! video/x-raw, format=BGRx, width=1440, height=1080,framerate=30/1 ! 
videoconvert ! video/x-raw, format=YUY2, width=1440, height=1080,framerate=30/1 ・・・ 

OpenCVのcvCvtColor関数でYUY2に変換する方法

以下Pythonのプログラムです。

ret, frame = cap.read() #上記で取得したフレームをframeに格納。
cv2. cvCvtColor(frame,  CV_BGR2YUV)   //BGRからYUY2に変換