从Webcam迁移到Raspicam时OpenCV的颜色问题

时间:2017-01-17 13:19:39

标签: c++ opencv camera raspberry-pi

我正在尝试使用OpenCV开发应用程序。我现在买了一个Raspberry Pi Camera 3(Raspicam 3)。我正在尝试使用在https://www.uco.es/investiga/grupos/ava/node/40找到的API将我的代码从使用Webcam的标准版本迁移到Raspicam版本。

我所做的只是转换:

cv::Mat image;

VideoCapture cap(0); // open the default camera

cap >> image;

cap.release();

cv::Mat image;

raspicam::RaspiCam_Cv Camera;
Camera.set( CV_CAP_PROP_FORMAT, CV_8UC3 );

Camera.grab();
Camera.retrieve ( image);

Camera.release();

现在,当我尝试用

看时,我拍的照片有很奇怪的颜色(看起来像是倒置的)
cv::imwrite("myimg.jpg",image);

我注意到的差异是raspberry pi camera API设置了这个值:

Camera.set( CV_CAP_PROP_FORMAT, CV_8UC1 );

但是这个值导致程序崩溃,

enter image description here

所以我要么用

Camera.set( CV_CAP_PROP_FORMAT, CV_8UC3 );

Camera.set( CV_CAP_PROP_FORMAT, CV_BGR2HSV );

然后,它不会崩溃,但颜色看起来很怪异。 (例如橙色是蓝色的)

问题是,如何防止这种颜色变化?如何使用正确的参数设置相机以便拍摄正常照片?

我应该让你知道,我不会详细了解OpenCV,只是试图解决这些问题。

提前感谢您的帮助。 欢呼声,

修改 当我评论该行

Camera.set( CV_CAP_PROP_FORMAT, CV_8UC1 );

一切都是蓝色的。所以我猜它与它没有任何关系。

编辑:添加了错误详情。

1 个答案:

答案 0 :(得分:1)

您是否检查过Raspberry Pi的色彩空间是否与Open CV相同?

Open CV使用蓝绿红(BGR)惯例,这种情况并不常见。它可能对应于您的“蓝色”描述...

如果是这样,只需交换第一个和最后一个通道即可获得RGB值:)