gpt4 book ai didi

OpenCV:合并分离的 JPEG 拜耳 channel

转载 作者:太空宇宙 更新时间:2023-11-03 23:01:19 33 4
gpt4 key购买 nike

我有一台相机为 4 个不同的拜耳 channel (B、G1、G2、R)提供 4 个独立的 JPEG 图像。

我想将其转换为彩色图像。

我现在正在做的是解压缩 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 图像。有人可以给我一些建议/技巧来加速这段代码吗?

最佳答案

首先,您应该做一个配置文件,看看时间大部分花在了哪里。也许都在imdecode() ,因为“看起来很清楚”,但你可能错了。

如果没有,.at<>()有点慢(你调用了将近 400 万次)。您可以通过更有效地扫描图像来获得一些加速。你也不需要 floor() - 这将避免将 int 转换为 double 并再次返回(200 万次)。这样的事情会更快:

int x , y;
for(y = 0; y < 1232; y++){
uint8_t* row = Reconstructed.ptr<uint8_t>(y);
if(y % 2 == 0){
uint8_t* i0 = imgMat[0].ptr<uint8_t>(y / 2);
uint8_t* i1 = imgMat[1].ptr<uint8_t>(y / 2);

for(x = 0; x < 1616; ){
//R
row[x] = i0[x / 2];
x++;

//G1
row[x] = i1[x / 2];
x++;
}
}
else {
uint8_t* i2 = imgMat[2].ptr<uint8_t>(y / 2);
uint8_t* i3 = imgMat[3].ptr<uint8_t>(y / 2);

for(x = 0; x < 1616; ){
//G2
row[x] = i2[x / 2];
x++;

//B
row[x] = i3[x / 2];
x++;
}
}
}

关于OpenCV:合并分离的 JPEG 拜耳 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17593588/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com