我有一台相机为4个不同的拜耳通道(B,G1,G2,R)提供了4个独立的JPEG图像。OpenCV:合并分开的JPEG bayer通道
我想将其转换为彩色图像。
我现在在做的是解压缩jpeg,手动恢复“原始”图像并使用cvtColor转换为彩色图像。但是这太慢了。我怎么能做得更好?
cv::Mat imgMat[4]=cv::Mat::zeros(616, 808, CV_8U); //height, width
for (k=0;k<4;k++) {
........
imgMat[k] = cv::imdecode(buffer, CV_LOAD_IMAGE_GRAYSCALE);
}
//Reconstruct the original image from the four channels! RGGB
cv::Mat Reconstructed=cv::Mat::zeros(1232, 1616, CV_8U);
int x,y;
for(x=0;x<1616;x++){
for(y=0;y<1232;y++){
if(y%2==0){
if(x%2==0){
//R
Reconstructed.at<uint8_t>(y,x)=imgMat[0].at<uint8_t>(y/2,x/2);
}
else{
//G1
Reconstructed.at<uint8_t>(y,x)=imgMat[1].at<uint8_t>(y/2,floor(x/2));
}
}
else{
if(x%2==0){
//G2
Reconstructed.at<uint8_t>(y,x)=imgMat[2].at<uint8_t>(floor(y/2),x/2);
}
else{
//B
Reconstructed.at<uint8_t>(y,x)=imgMat[3].at<uint8_t>(floor(y/2),floor(x/2));
}
}
}
}
//Debayer
cv::Mat ReconstructedColor;
cv::cvtColor(Reconstructed, ReconstructedColor, CV_BayerBG2BGR);
看来很清楚,花费更多时间解码jpeg图像。有人可以使用某些建议/技巧来加速此代码?
你确定你不能设置相机作为输出的原始拜耳图像,没有通道分离和没有jpg压缩?这可能是带宽方面的问题,但肯定会加速随后的细化...... – Antonio
是的。我可以做到这一点,选择不同的模式。但是,我得到的帧速率显然要慢得多......我想用更高的帧速率工作。 –
我会检查时间真的花在哪里。如果是在BGGR图像重建步骤中,您有一些希望。另一方面,如果时间真的花在imdecode()中,我看不到可以对其进行优化的方式。如果BGGR图像重建步骤是计算中大部分时间的部分,我的第一个猜测是您必须查看cvtColor的代码并用不同类型的输入重写自己的bayer转换。同时检查你是不是花时间重新分配内存(所有这些零可以用setTo(0)改变。) – Antonio