2

このコードをruby-openvcに変換するのに役立ちますか?

オリジナル http://aishack.in/tutorials/tracking-colored-objects-in-opencv/

IplImage* GetThresholdedImage(IplImage* img)
{
  #Convert the image into an HSV image
  IplImage* imgHSV = cvCreateImage(cvGetSize(img), 8, 3);
  cvCvtColor(img, imgHSV, CV_BGR2HSV);

  #create a new image that will hold the threholded image (which will be returned).
  IplImage* imgThreshed = cvCreateImage(cvGetSize(img), 8, 1);

  #Now we do the actual thresholding:
  cvInRangeS(imgHSV, cvScalar(20, 100, 100), cvScalar(30, 255, 255), imgThreshed)

  cvReleaseImage(&imgHSV);
  return imgThreshed;
}

翻訳済み

    def getThresholdedImage2 (img)
  #blur the source image to reduce color noise
  img = img.smooth(CV_GAUSSIAN, 7, 7)

  #convert the image to hsv(Hue, Saturation, Value) so its
  #easier to determine the color to track(hue)  imgHSV = IplImage.new(img.width, img.height, 8, 3);
  imgHSV = img.BGR2HSV

  #create a new image that will hold the threholded image (which will be returned).
  imgThreshed = IplImage.new(img.width, img.height, 8, 1);

  #Now we do the actual thresholding:
  imgThreshed = imgHSV.in_range(CvScalar.new(20, 100, 100), CvScalar.new(30, 255, 255));


  return imgThreshed
end
4

1 に答える 1

1

実際、私はルビーをまったく知りませんが、あなたの問題の解決策を見つけたようです。Ruby-OpenCVは単なるライブラリラッパーのようです。

たとえば、cvInRangeS関数の類似物を見つけたい場合は、次のようにする必要があります。

ソースファイルを検索すると、次のコンテンツを含むext / opencv/cvmat.hが見つかりました。

VALUE rb_range(VALUE self, VALUE start, VALUE end);
VALUE rb_range_bang(VALUE self, VALUE start, VALUE end);

そして、cppファイルには次のような説明があります。

/*
 * call-seq:
 *   in_range(<i>min, max</i>) -> cvmat
 *
 * Check that element lie between two object.
 * <i>min</i> and <i>max</i> should be CvMat that have same size and type, or CvScalar.
 * Return new matrix performed per-element,
 *  dst(I) = within the range ? 0xFF : 0
 */

したがって、この方法で必要なすべてのルビー関数を見つける必要があります。幸運を!

于 2012-12-08T22:46:17.307 に答える