Я хочу отслеживать цвет в изображении. Я использую следующий код (javaCV):
//Load initial image.
iplRGB = cvLoadImage(imageFile, CV_LOAD_IMAGE_UNCHANGED);
//Prepare for HSV
iplHSV = cvCreateImage(iplRGB.cvSize(), iplRGB.depth(), iplRGB.nChannels());
//Transform RGB to HSV
cvCvtColor(iplRGB, iplHSV, CV_BGR2HSV);
//Define a region of interest.
//minRow = 0; maxRow = iplHSV.height();
//minCol = 0; maxCol = iplHSV.width();
minRow = 197; minCol = 0; maxRow = 210; maxCol = 70;
//Print each HSV for each pixel of the region.
for (int y = minRow; y < maxRow; y++){
for (int x = minCol; x < maxCol; x++) {
CvScalar pixelHsv = cvGet2D(iplHSV, y, x);
double h = pixelHsv.val(0);
double s = pixelHsv.val(1);
double v = pixelHsv.val(2);
String line = y + "," + x + "," + h + "," + s + "," + v;
System.out.println(line);
}
}
Я легко могу определить минимальные и максимальные значения HUE и SAT по выходным данным. Давайте назовем тогда minHue, minSat, maxHue и maxSat (не круто!) Затем я выполняю этот код:
iplMask = cvCreateImage(iplHSV.cvSize(), iplHSV.depth(), 1);
CvScalar min = cvScalar(minHue, minSat, 0, 0);
CvScalar max = cvScalar(maxHue, maxSat, 255 ,0);
cvInRangeS(iplHSV, min, max, iplMask);
Когда я показываю iplMask, я не должен видеть область интереса полностью белым? Я не вижу контура белого цвета, но внутренняя часть прямоугольника черная. Я должен что-то связать, но я не понимаю, что.
Я знаю, что Hue в [0..179] с OpenCV, а Sat и Val в [0..255], но, поскольку я использую значения, отображаемые openCV, я думаю, что мне не нужно изменять масштаб ...
Во всяком случае, я потерян. Может кто-нибудь объяснить? Спасибо.