Mittelwert einer Bildmatrix bilden und abspeichern
-
Guten Tag liebe Community,
ich bin ziemlich neu in diesem Gebiet und suche nun nach Vorschlägen. Ich schildere kurz mein Anliegen:Ich schreibe ein C++ Programm auf meinem Beaglebone Black mit dem Betriebssystem Ubuntu 14.04.
In dem Programm lese ich ein Bild im PNG Format ein und würde nun gerne die Summe aller Elemente dieser Bildmatrix erhalten um daraus den Mittelwert zu bilden. Das Bild ist in ein Graustufenbild umgewandelt worden. Über die Helligkeitsinformationen (Mittelwert) möchte ich einen Rückschluss auf die Bewegungen in dem Bild schließen.Nun folgt der Programmcode:
#include <stdio.h> #include "opencv2/core/core.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/nonfree/nonfree.hpp" #include <string> #include <sstream> using namespace cv; static void help() { printf("\nThis program demonstrates using features2d detector, descriptor extractor and simple matcher\n" "Using the SURF desriptor:\n" "\n" "Usage:\n matcher_simple <image1> <image2>\n"); } int main(int argc, char** argv) { if(argc != 3) { help(); return -1; } Mat img1 = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE); Mat img2 = imread(argv[2], CV_LOAD_IMAGE_GRAYSCALE); if(img1.empty() || img2.empty()) { printf("Can't read one of the images\n"); return -1; } Mat img_matches; img_matches = img1 - img2; img_matches = imwrite( "./differenz.png", img_matches); waitKey(0); long summe = 0; for(int i=0;i < 100;i++) { summe += img_matches[i]; } IplImage *img = cvLoadImage("differenz.png"); CvMat *mat = cvCreateMat(img->height,img->width,CV_32FC3 ); cvConvert( img, mat ); cvSave( "./combined2307.txt", mat ); FILE *datei; datei = fopen ("datei.txt", "w"); if (datei == NULL) { printf("Fehler beim oeffnen der Datei."); return 1; } std::string s = std::to_string(summe); fprintf (datei, "%s", s.c_str()); fclose (datei); return 0; }Der Fehler der beim compilieren nun ensteht ist der, dass img_Matches vom Typ cv::mat ist und somit nicht in einen Typ int gebracht werden kann...
no match for ‘operator[]’ (operand types are ‘cv::M at’ and ‘int’)
summe += img_matches[i];Ich hoffe mir kann da jemand weiter helfen.
-
Wo ist deine C++ Frage?
Hast du die OpenCV Doku gelesen?
-
manni66 schrieb:
Wo ist deine C++ Frage?
Hast du die OpenCV Doku gelesen?Ich habe gehofft dass es Funktionen in C++ gibt, die mir ein Scalar aus der Matrix bilden. OpenCV funktioniert nicht einwandfrei auf dem Beaglebone. Viele Funktionen zeigen einen Treiberkonflikt an. Deswegen wollte ich es über C++ Bibliotheken und Funktionen realisieren.
Ich bin aber über jeden Tipp dankbar.
