Ich versuche, Histogramme für Materialien in OpenCV 3.2 zu erstellen, bin aber von den HSV-Bereichen verwirrt - sie scheinen nicht mit der Dokumentation übereinzustimmen, oder ich nähere mich ihr falsch.OpenCV cvtColor CV_BGR2HSV CV_32FC3 Sättigungsbereich
// cv::Mat bgrPhoto contains a test image
cv::Mat3f hsvPhoto;
bgrPhoto.convertTo(hsvPhoto, CV_32FC3);
cv::cvtColor(hsvPhoto, hsvPhoto, CV_BGR2HSV, CV_32FC3);
std::vector<cv::Mat1f> hsvChannels;
cv::split(hsvPhoto, hsvChannels);
// Documentation [0.0, 1.0]: measured here Hue to 360.0, Sat to 1.0, Val to 255.0
double minHue, maxHue, minSat, maxSat, minVal, maxVal;
cv::minMaxIdx(hsvChannels[0], &minHue, &maxHue, 0, 0);
cv::minMaxIdx(hsvChannels[1], &minSat, &maxSat, 0, 0);
cv::minMaxIdx(hsvChannels[2], &minVal, &maxVal, 0, 0);
OpenCV speichert 'H' Kanalwerte von [0 - 180],' S' und 'V' Werte von [0 - 255]. Konvertieren Sie für "float" die Werte entsprechend. – zindarod
H in [0,360], S, V in [0,1]. Siehe [das Dokument] (http://docs.opencv.org/master/de/d25/imgproc_color_conversions.html#color_convert_rgb_hsv). Außerdem versuchen Sie, ein Ausgabebild mit 21 (CV_32FC3 ergibt 21) Zielkanälen zu erstellen. Verwenden Sie einfach 'cv :: cvtColor (hsvPhoto, hsvPhoto, CV_BGR2HSV);'. Auch 'bgrPhoto.convertTo (hsvPhoto, CV_32F);' da muss nur der Typ und nicht die Tiefe angegeben werden. – Miki