2

画像内の色を追跡したい。次のコード (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 は OpenCV で [0..179] にあり、Sat と Val は [0..255] にあることはわかっていますが、openCV によって表示される値を使用しているので、再スケーリングする必要はないと思います...

とにかく、私は迷っています。誰か説明できますか?ありがとう。

4

0 に答える 0