RasPi Cam C++ API - 图像颜色
RasPi Cam C++ API - Color of image
我刚刚尝试了 here 的 RaspiCam C++ API,但我的照片颜色太蓝了:
命令制作的照片raspistill -o rcapture.jpg:
有点太红了,不过比第一个好看多了
第一张照片由this示例制作
我的目标是通过C++得到正常颜色的图像API
Juanpalma 建议的此问题的最终解决方案是更改混淆的频道:
cv::Mat image;
cv::Mat channels[3];
cv::Mat cbuffer[1];
Camera.grab();
Camera.retrieve(image);
cv::split(image, channels);
//here is the fix
cbuffer[0] = channels[0];
channels[0] = channels[2];
channels[2] = cbuffer[0];
merge(channels, 3, image);
//end
my_message = serialize(image);
是的,红色和蓝色通道颠倒了你必须处理缓冲区:
void interchange_colors(unsigned char *data, int tam)
{
unsigned char cR;
for(int i=0; i <= tam; i+=3){
cR = data[i];
data[i]=data[i+2];
data[i+2]=cR;
}
}
我刚刚尝试了 here 的 RaspiCam C++ API,但我的照片颜色太蓝了:
命令制作的照片raspistill -o rcapture.jpg:
第一张照片由this示例制作
我的目标是通过C++得到正常颜色的图像API
Juanpalma 建议的此问题的最终解决方案是更改混淆的频道:
cv::Mat image;
cv::Mat channels[3];
cv::Mat cbuffer[1];
Camera.grab();
Camera.retrieve(image);
cv::split(image, channels);
//here is the fix
cbuffer[0] = channels[0];
channels[0] = channels[2];
channels[2] = cbuffer[0];
merge(channels, 3, image);
//end
my_message = serialize(image);
是的,红色和蓝色通道颠倒了你必须处理缓冲区:
void interchange_colors(unsigned char *data, int tam)
{
unsigned char cR;
for(int i=0; i <= tam; i+=3){
cR = data[i];
data[i]=data[i+2];
data[i+2]=cR;
}
}