Sie müssen über jedes Bild in einer Schleife, und die Ergebnisse akkumulieren. Da dies wahrscheinlich zu Überlauf führt, können Sie jedes Bild in ein CV_64FC3
Bild konvertieren und auf einem CV_64FC3
Bild akkumulieren. Sie können dafür auch CV_32FC3
oder CV_32SC3
verwenden, d. H. Unter Verwendung von float
oder integer
anstelle von double
.
Sobald Sie alle Werte angesammelt haben, können Sie convertTo
verwenden beide:
- das Bild eine durch die Anzahl der Bild
CV_8UC3
- divide jeden Wert machen, die tatsächliche Mittelwert zu erhalten.
Dies ist ein Beispielcode, der 100 zufällige Bilder, und berechnet und zeigt die Mittelwert erzeugt:
#include <opencv2\opencv.hpp>
using namespace cv;
Mat3b getMean(const vector<Mat3b>& images)
{
if (images.empty()) return Mat3b();
// Create a 0 initialized image to use as accumulator
Mat m(images[0].rows, images[0].cols, CV_64FC3);
m.setTo(Scalar(0,0,0,0));
// Use a temp image to hold the conversion of each input image to CV_64FC3
// This will be allocated just the first time, since all your images have
// the same size.
Mat temp;
for (int i = 0; i < images.size(); ++i)
{
// Convert the input images to CV_64FC3 ...
images[i].convertTo(temp, CV_64FC3);
// ... so you can accumulate
m += temp;
}
// Convert back to CV_8UC3 type, applying the division to get the actual mean
m.convertTo(m, CV_8U, 1./images.size());
return m;
}
int main()
{
// Create a vector of 100 random images
vector<Mat3b> images;
for (int i = 0; i < 100; ++i)
{
Mat3b img(598, 598);
randu(img, Scalar(0), Scalar(256));
images.push_back(img);
}
// Compute the mean
Mat3b meanImage = getMean(images);
// Show result
imshow("Mean image", meanImage);
waitKey();
return 0;
}
http://answers.opencv.org/question/7385/how-to-calculate - der Mittelwert von mehreren Bildern/ –
Ich bin mir nicht sicher, ob ich deine Frage in meiner Antwort richtig verstanden habe, könntest du bitte kommentieren, wenn ich sie richtig verstanden habe? – kebs
Ich möchte den Mittelwert von 100 Bild nehmen, mein Problem: Wenn ich den Mittelwert durch Hinzufügen jedes Pixels nehme, wird meine Schleife tun 598 * 598 * 100 = 25000000 Wiederholung –