如何保存图像框架?

时间:2014-04-03 12:02:13

标签: c++ opencv image-processing

我试图找到10个图像的平均值和下面的代码非常好,因为我看到使用imshow(),但当我尝试保存结果图像时,它保存了一个完全黑色的图像。 有人请告诉我我的代码有什么问题吗?

int main(){
cv::Mat frame32f,temp;
char filename[40];
Mat mean;
const int count =10;
const int width  =474;
const int height = 266;
cv::Mat resultframe = cv::Mat::zeros(height,width,CV_32FC3);
for(int i = 1 ; i<= count; i++){
    sprintf(filename,"%d.JPG",i);
    cout<<filename;
    IplImage* img = cvLoadImage(filename,CV_LOAD_IMAGE_COLOR);
    Mat frame(img);

    frame.convertTo(frame32f,CV_32FC3);
    resultframe +=frame32f;
    frame.release();
}
resultframe *= (1.0/count/255);
imwrite("avg.jpg",resultframe);
imshow("previous",resultframe);
waitKey(0);
return 0;
}

我也试过这个但是不能。

vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9);

try {
    imwrite("result.png", mat, compression_params);
}

2 个答案:

答案 0 :(得分:0)

为什么要除以 255

尝试除以 1.0 /计数

此外,如果您事先知道计数的值,请在添加之前进行分割。

答案 1 :(得分:0)

imwrite / imread无法处理float数据,所以在保存之前将convertTo()uchar。

Mat bgr24;
resultframe.convertTo(bgr24, CV_8U);
imwrite("lala.jpg",bgr24);

(哦,顺便说一下,请在分部前)