2016-07-30 22 views

Antwort

0

Klingt, als ob Sie nach dem Histogramm eines Bildes suchen. Es ist eine grundlegende Operation in der Bildverarbeitung.

Histogramme werden Zählungen der gesammelten Daten in eine Reihe von vordefinierten Bins organisiert.

Das Dokument der Berechnung des Histogramms OpenCV verwendet, ist in this link

0

Es klingt wie Sie ist nun das räumliche Momente einer gerasterten Version Ihres Bildes.

Zuerst müssen Sie Ihr Bild Schwelle es binär machen: http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold

Sie können dann die Bild Momente berechnen: http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=moments#moments

Wenn Sie eine physikalische Analogie der räumlichen Momente möchten können Sie Stellen Sie sich vor, dass jedes weiße Pixel eine Einheitspunktmasse ist, dann wäre das zweite Moment die Rotationsträgheit des Bildes. Wenn die weißen Pixel (Punktmassen) eng gruppiert sind, wird das zweite Moment niedrig sein (das Bild wird sich leicht drehen).

0

Ich möchte einen anderen Ansatz teilen, den ich verwendet habe.

Mat img = imread(argv[1], CV_LOAD_IMAGE_COLOR); 
cvtColor(img, img, CV_RGB2GRAY); 
threshold(img, img, 35, 255, THRESH_BINARY); 

Mat distance; 
distanceTransform(img, distance, CV_DIST_L2, 3); 
distance = min(distance, 1); 
Scalar distribution = mean(dist); 

cout << "The distribution is: " << distribution << std::endl; 

Der schwierige Teil ist die Kombination von distanceTransformmin und Funktionen. Der Effekt der Min-Funktion ist bei Bildern mit guter Verteilung kleiner und der Mittelwert wird größer.