Fad*_*dwa 4 opencv element frames mean mat
我想通过添加它们来计算帧序列的平均值,然后除以帧的总数.问题是我无法访问图像中的像素.我用过这段代码.
for(i = 1; i <= N; i++){
image = imread(fileName.c_str(),0);
Mat Mean = Mat::zeros(width, height,image.type());
for(w = 0; w < image.rows ; w++)
for(h = 0; h < image.cols ; h++)
Mean.row(w).col(h) += (image.at<unsigned float>(w,h) / N);
}
Run Code Online (Sandbox Code Playgroud)
我总是有一个Assertion Failed错误.我也尝试过:
(float)image.at<uchar>(w,h)
image.row(w).col(h)[0]
image.row(w).col(h).val[0]
Run Code Online (Sandbox Code Playgroud)
但是徒劳无功
这是工作代码......但我无法显示最终结果,因为它是浮动的.
Mat Mean = Mat::zeros(width, height,CV_32F);
for(i = 1; i <= framesToLearn ; i++){
image = imread(fileName.c_str(),0);
accumulate(image, Mean);
}
Mean = Mean /framesToLearn;
imshow("mean",Mean);
waitKey(0);
Run Code Online (Sandbox Code Playgroud)
也许尝试使用不同的方法cv::accumulate
:
cv::Mat avgImg;
avgImg.create(width, height,CV_32FC3);
for(i = 1; i <= N; i++){
image = imread(fileName.c_str(),0);
cv::accumulate(image, avgImg);
}
avgImg = avgImg / N;
Run Code Online (Sandbox Code Playgroud)
请注意,如果您需要显示结果图像,则必须将其转换为CV_8U
或将其标准化,例如:
Mat Mean = Mat::zeros(width, height,CV_32F);
for(i = 1; i <= framesToLearn ; i++){
image = imread(fileName.c_str(),0);
accumulate(image, Mean);
}
Mean = Mean /framesToLearn;
Mean.convertTo(Mean,CV_8U);
imshow("mean",Mean);
waitKey(0);
Run Code Online (Sandbox Code Playgroud)