2017-07-23 9 views
-1

Mein Ziel ist es, ein Histogramm für ein Graustufenbild zu erstellen. Der Code, den ich verwendet wird:Falsche Verwendung von calcHist

Mat img = imread("leeds-castle.jpg",IMREAD_GRAYSCALE); 
Mat hst; 
int hstsize = 256; 
float ranges[] = { 0,256 }; 
float *hstrange = { ranges }; 
calcHist(img, 1,0, Mat(), hst, 1, &hstsize,&hstrange,true,false); 
int hst_w = 512, hst_h = 400; 
int bin_w = cvRound((double)hst_w/256); 
Mat histimg(hst_w, hst_h, CV_8U); 
normalize(hst, hst, 0, histimg.rows, NORM_MINMAX, -1, Mat()); 
for (int i = 1; i < 256; i++) 
{ 
    line(histimg, Point(bin_w*(i - 1), hst_h - cvRound(hst.at<float>(i - 1))), Point(bin_w*i, hst_h - cvRound(hst.at<float>(i))), 2, 8, 0); 
} 
imshow("Histogram", histimg); 

Der einzige Fehler die Verwendung von calcHist() Funktion ist. Ist irgendetwas nicht in Ordnung?

+1

Was ist der Fehler? – beaker

+0

Fehler ist \t "C2665 \t 'cv :: calcHist': keine der 3 Überladungen könnte alle Argumenttypen konvertieren" –

Antwort

0

Siehe Kommentar über calcHist die korrekte Verwendung zu identifizieren:

// original image 
Mat img = imread("leeds-castle.jpg",IMREAD_GRAYSCALE); 
// NOTE: check if img.channels is equal to 1 

// histogram 
Mat hst; 

// number of bins 
int hstsize = 256; 
float ranges[] = { 0,256 }; 
float *hstrange = { ranges }; 

// parameters for histogram calculation 
bool uniform = true; 
bool accumulate = false; 

// calculate histogram 
// the '&' was missing here 
calcHist(&img, 1,0, Mat(), hst, 1, &hstsize,&hstrange,true,false); 
+0

Könnten Sie beschreiben, welche Änderungen Sie im Code vorgenommen haben und warum dies das Problem des OP behebt? Wie es aussieht, ist Ihr Beitrag weniger eine Antwort und mehr ein Spiel von Where's Waldo. – beaker

+0

@beaker: Ich bin mir sicher, dass diejenigen, die die Kommentare lesen (können), die Antwort finden, ohne zu spielen Wo ist Waldo :-) – Totoro

+0

Ein Drittel des Codes auszuschneiden und die Aufmerksamkeit auf die Zeile zu richten, die etwas geändert hat, half etwas, aber nur Antworten werden im Allgemeinen als weniger hilfreich betrachtet als solche, die eine Erklärung enthalten, warum und wie der aktualisierte Code funktioniert. Siehe https://meta.stackoverflow.com/questions/290231/is-it-wrong-to-ask-for-explanation-of-how-why-the-code-works-in-code-only-ans und viele andere in Meta. – beaker

Verwandte Themen