Meine Funktion soll ein einfaches Histogram eines Graubildes erzeugen.
Dies macht es auch und ich kann das Histogram auch per OpenCV Funktion "cvSaveImage" als Bild speichern.
Aber es lässt sich nicht per OpenCV Funktion "cvShowImage" auf dem Bildschirm anzeigen.
Eigentlich sollte ein cvShowImage Fenster aus einer QT Anwendung heraus doch aufrufbar sein, oder?
Code: Alles auswählen
CvHistogram* hist;
IplImage* image= 0;
IplImage* imgHistogram = 0;
IplImage* gray= 0;
void createHistogram() {
image = cvLoadImage("0_image_gray.png",1);
int bins = 256;
int hsize[] = {bins};
float max_value = 0, min_value = 0;
float value;
int normalized;
float xranges[] = { 0, 256 };
float* ranges[] = { xranges };
gray = cvCreateImage( cvGetSize(image), 8, 1 );
cvCvtColor( image, gray, CV_BGR2GRAY );
IplImage* planes[] = { gray };
hist = cvCreateHist( 1, hsize, CV_HIST_ARRAY, ranges,1);
cvCalcHist( planes, hist, 0, NULL);
cvGetMinMaxHistValue( hist, &min_value, &max_value);
imgHistogram = cvCreateImage(cvSize(bins, 50),8,1);
cvRectangle(imgHistogram, cvPoint(0,0), cvPoint(256,50), CV_RGB(255,255,255),-1);
for(int i=0; i < bins; i++) {
value = cvQueryHistValue_1D( hist, i);
normalized = cvRound(value * 50 / max_value);
cvLine(imgHistogram,cvPoint(i,50), cvPoint(i,50-normalized), CV_RGB(0,0,0));
}
cvNamedWindow("histogram",CV_WINDOW_AUTOSIZE);
// funktioniert nicht !!
cvShowImage( "histogram", imgHistogram );
// funktioniert
cvSaveImage("0_histo.png", imgHistogram);
}