У меня есть камера, которая дает 4 отдельных изображения JPEG для 4 разных каналов Байера (B, G1, G2, R).
Я хочу преобразовать это в цветное изображение.
Что я делаю в данный момент, так это распаковываю 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 требуется больше времени. Есть ли у кого-нибудь совет/хитрость, которые я мог бы использовать, чтобы ускорить этот код?