使用openCV或javaCV的HSV值

使用openCV或javaCV的HSV值,opencv,javacv,Opencv,Javacv,我想跟踪图像中的颜色。我使用以下代码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

我想跟踪图像中的颜色。我使用以下代码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);
   }
}
当我展示iplMask时,我是否应该看到感兴趣的区域完全是白色的?我没有,我看到轮廓是白色的,但矩形的内部是黑色的。我必须搞点什么,但我不明白是什么

我知道OpenCV的色调在[0..179]中,Sat和Val在[0..255]中,但由于我使用OpenCV显示的值,我认为我不必重新缩放


不管怎样,我迷路了。有人能解释一下吗?谢谢。

对于8位图像,所有HSV值都会缩放到0到255之间。。。“你为什么说色调限制在179度?”萨缪劳德医生说,看起来他是对的。RGB2HSV首先将S和V转换为浮点数。它表示在输出时,S和V在0..1范围内,H为0..360。然后它说,要转换为8位,S和V乘以255,H除以2,告诉我们H在0到180Oops的范围内,看起来是这样的。无论如何,回顾一下cvInRangeS的文档,看起来我们需要CVScalarMax=cvScalarmaxHue+1,maxSat+1255,0;获得全白色遮罩。对于8位图像,所有HSV值都会缩放到0到255之间。。。“你为什么说色调限制在179度?”萨缪劳德医生说,看起来他是对的。RGB2HSV首先将S和V转换为浮点数。它表示在输出时,S和V在0..1范围内,H为0..360。然后它说,要转换为8位,S和V乘以255,H除以2,告诉我们H在0到180Oops的范围内,看起来是这样的。无论如何,回顾一下cvInRangeS的文档,看起来我们需要CVScalarMax=cvScalarmaxHue+1,maxSat+1255,0;得到一个全白色的面具。
    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);