Created
March 2, 2018 20:33
-
-
Save astarasikov/a0dbc09603d03afbf626171739625913 to your computer and use it in GitHub Desktop.
Y422 Color Capture support for Aravis in OpenCV
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From ceb9d548a6ed86e5f20f3f0605872145097bfbb6 Mon Sep 17 00:00:00 2001 | |
From: Alexander Tarasikov <[email protected]> | |
Date: Fri, 2 Mar 2018 21:32:01 +0100 | |
Subject: [PATCH] NOMERGE: Add Y422 color format support to Aravis | |
--- | |
modules/videoio/src/cap_aravis.cpp | 12 ++++++++++++ | |
samples/cpp/videocapture_basic.cpp | 15 +++++++++++---- | |
2 files changed, 23 insertions(+), 4 deletions(-) | |
diff --git a/modules/videoio/src/cap_aravis.cpp b/modules/videoio/src/cap_aravis.cpp | |
index f2fc9da77..8ed77048e 100644 | |
--- a/modules/videoio/src/cap_aravis.cpp | |
+++ b/modules/videoio/src/cap_aravis.cpp | |
@@ -77,6 +77,7 @@ | |
// Supported types of data: | |
// video/x-raw, fourcc:'GREY' -> 8bit, 1 channel | |
// video/x-raw, fourcc:'Y800' -> 8bit, 1 channel | |
+// video/x-raw, fourcc:'Y422' -> 8bit, 2 channel | |
// video/x-raw, fourcc:'Y12 ' -> 12bit, 1 channel | |
// video/x-raw, fourcc:'Y16 ' -> 16bit, 1 channel | |
// video/x-raw, fourcc:'GRBG' -> 8bit, 1 channel | |
@@ -84,6 +85,7 @@ | |
#define MODE_GREY CV_FOURCC_MACRO('G','R','E','Y') | |
#define MODE_Y800 CV_FOURCC_MACRO('Y','8','0','0') | |
+#define MODE_Y422 CV_FOURCC_MACRO('Y','4','2','2') | |
#define MODE_Y12 CV_FOURCC_MACRO('Y','1','2',' ') | |
#define MODE_Y16 CV_FOURCC_MACRO('Y','1','6',' ') | |
#define MODE_GRBG CV_FOURCC_MACRO('G','R','B','G') | |
@@ -326,6 +328,10 @@ IplImage* CvCaptureCAM_Aravis::retrieveFrame(int) | |
depth = IPL_DEPTH_16U; | |
channels = 1; | |
break; | |
+ case ARV_PIXEL_FORMAT_YUV_422_PACKED: | |
+ depth = IPL_DEPTH_8U; | |
+ channels = 2; | |
+ break; | |
} | |
if(depth && channels) { | |
IplImage src; | |
@@ -480,6 +486,8 @@ double CvCaptureCAM_Aravis::getProperty( int property_id ) const | |
return MODE_Y16; | |
case ARV_PIXEL_FORMAT_BAYER_GR_8: | |
return MODE_GRBG; | |
+ case ARV_PIXEL_FORMAT_YUV_422_PACKED: | |
+ return MODE_Y422; | |
} | |
} | |
break; | |
@@ -556,6 +564,10 @@ bool CvCaptureCAM_Aravis::setProperty( int property_id, double value ) | |
newFormat = ARV_PIXEL_FORMAT_BAYER_GR_8; | |
targetGrey = 128; | |
break; | |
+ case MODE_Y422: | |
+ newFormat = ARV_PIXEL_FORMAT_YUV_422_PACKED; | |
+ targetGrey = 128; | |
+ break; | |
} | |
if(newFormat != pixelFormat) { | |
stopCapture(); | |
diff --git a/samples/cpp/videocapture_basic.cpp b/samples/cpp/videocapture_basic.cpp | |
index 6f4671545..400187519 100644 | |
--- a/samples/cpp/videocapture_basic.cpp | |
+++ b/samples/cpp/videocapture_basic.cpp | |
@@ -23,9 +23,11 @@ int main(int, char**) | |
cap.open(0); | |
// OR advance usage: select any API backend | |
int deviceID = 0; // 0 = open default camera | |
- int apiID = cv::CAP_ANY; // 0 = autodetect default API | |
+ int apiID = cv::CAP_ARAVIS; // 0 = autodetect default API | |
// open selected camera using selected API | |
cap.open(deviceID + apiID); | |
+ //cap.set(CV_CAP_PROP_FOURCC, CV_FOURCC_MACRO('G', 'R', 'E', 'Y')); | |
+ cap.set(CV_CAP_PROP_FOURCC, CV_FOURCC_MACRO('Y', '4', '2', '2')); | |
// check if we succeeded | |
if (!cap.isOpened()) { | |
cerr << "ERROR! Unable to open camera\n"; | |
@@ -42,12 +44,17 @@ int main(int, char**) | |
// check if we succeeded | |
if (frame.empty()) { | |
cerr << "ERROR! blank frame grabbed\n"; | |
- break; | |
+ continue; | |
+ //break; | |
} | |
+ Mat rgb = Mat::zeros(frame.size(), CV_8UC3); | |
+ cvtColor(frame, rgb, COLOR_YUV2RGB_UYVY); | |
+ cvtColor(rgb, rgb, COLOR_RGB2BGR); | |
// show live and wait for a key with timeout long enough to show images | |
- imshow("Live", frame); | |
+ //imshow("Live", frame); | |
+ imshow("Live", rgb); | |
if (waitKey(5) >= 0) | |
- break; | |
+ continue; | |
} | |
// the camera will be deinitialized automatically in VideoCapture destructor | |
return 0; | |
-- | |
2.12.2 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment