【发布时间】:2017-10-05 21:25:20
【问题描述】:
我正在尝试为 OpenCV 3.2 中的材料构建直方图,但对 HSV 范围感到困惑——它们似乎与文档不匹配,或者我接近错误。
// 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 存储来自 [0 - 180] 的
H通道值、S和来自 [0 - 255] 的V值。对于float,相应地转换值。 -
H 在 [0,360],S,V 在 [0,1]。见the doc。此外,您正在尝试创建具有 21 个(CV_32FC3 评估为 21)目标通道的输出图像。只需使用
cv::cvtColor(hsvPhoto, hsvPhoto, CV_BGR2HSV);。还有bgrPhoto.convertTo(hsvPhoto, CV_32F);,因为只需要指定类型而不是深度。