如何在OpenCV(使用C ++)中获取多个图像的平均图像?

Cra*_*aig 1 c++ opencv

我正在计算两个图像的均值图像,不知道在OpenCV中使用功能mean()的正确方法。

Mat img1,img2,img3;
img1=imread("picture1.jpg");
img2=imread("picture2.jpg");    
img3=mean(img1,img2);
Run Code Online (Sandbox Code Playgroud)

但是它说

R6010
-abort() has been recalled
Run Code Online (Sandbox Code Playgroud)

如何获得img1和img2的平均值?谢谢。

X3l*_*liF 5

根据opencv文档:

“函数均值独立地为每个通道计算数组元素的平均值M,然后将其返回:”

这意味着它应该为图像的每一层返回一个标量,第二个参数是执行计算的像素掩码

您是否只是尝试做这样的事情?

img3 =(img1 + img2)* 0.5;

[编辑]为避免值大于255造成的损失,您可能应该在执行计算之前将图像转换为CV_32F,然后使用ConvertTo上的cv :: convertTo opencv文档将操作结果转换为CV_8U

  • 晚了 5 年,但对于像我这样后来找到这个答案的人来说可能有用:我认为如果你先乘以 0.5,然后将它们相加,你就可以避免因大于 255 的值而导致的损失。 (2认同)

coi*_*oin 5

您可以使用cv::accumulate

Mat img3 = Mat::zeros(img1.size(), CV_32F); //larger depth to avoid saturation
cv::accumulate(img1, img3);
cv::accumulate(img2, img3);
img3 = img3/2;
Run Code Online (Sandbox Code Playgroud)