2016-08-02 56 views
-1

的我刚刚试过RaspiCam C++ API从here和我的照片的颜色太蓝: enter image description hereRasPi凸轮C++ API - 彩色图像

照片由命令作出raspistill -o rcapture.jpg: enter image description here 这是一个有点太红,但比第一个

第一张照片是由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); 
+0

您需要调整白平衡。有一个自动模式,检查文档。 – adrianN

+0

@adrianN这不是一个白平衡问题,它看起来像红色和蓝色的渠道是颠倒。 –

+0

@MarkRansom可能你是对的,但如何解决它? –

回答

1

是红色和蓝色通道被颠倒,你必须处理缓冲区:

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; 
    } 
} 
+0

谢谢你的答案胡安帕尔马。我没有线索在哪里放置你提到的代码,但我发现如何在这里更换频道 - http://stackoverflow.com/questions/20341910/opencv-taking-a-3-channel-rgb-image-分裂通道和观看-AN-图像-WI。 无论如何,它解决了问题与相机的图片,所以我接受你的答案。 –