0

トラックバーを使用せずに1つの色を検出するにはどうすればよいですか(1つの色の範囲を識別します)?その範囲内のすべての色付きオブジェクトを取得しようとしていますが、QtとopenCVを使用しています。

トラックバーを使用してこのコードを添付しました:

  CvSeq* find_contour = NULL;
  bool isStop = false;
  img = cvLoadImage(QFileDialog::getOpenFileName(this, "Ouvrir un fichier", "/../../Fichiers Image", "Image (*.jpg *.bmp *.jpeg)").toStdString().c_str(),3);
  if(img == NULL)
  {
    printf("capture device not found!!");

  }


  Allocate_imgs();

  // creat windows
  cvNamedWindow("Capture", CV_WINDOW_AUTOSIZE);
  cvNamedWindow("Result", CV_WINDOW_AUTOSIZE);


  // To in_rang_filter() MIN , MAX RGB value set
  cvCreateTrackbar( "minR","Result",&mR_val, 256,set_RGB);
  cvCreateTrackbar( "minG","Result",&mG_val, 256,set_RGB);
  cvCreateTrackbar( "minB","Result",&mB_val, 256,set_RGB);

  cvCreateTrackbar( "maxR","Result",&MAR_val, 256,set_RGB);
  cvCreateTrackbar( "maxG","Result",&MAG_val, 256,set_RGB);
  cvCreateTrackbar( "maxB","Result",&MAB_val, 256,set_RGB);
  //


  cvCvtColor( img, imgHsv, CV_BGR2HSV);//convert the color space
  in_rang_filter();


  cvShowImage("Capture", img);
  cvShowImage("Result", test);
  cvWaitKey(0);
  cvReleaseImage(&imgResult);
  cvReleaseImage(&imgHsv);
  cvDestroyAllWindows();

}


void in_rang_filter()
{
  IplImage* test=cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
  CvScalar min_color = CV_RGB(mR_val,mG_val,mB_val);
  CvScalar max_color = CV_RGB(MAR_val,MAG_val,MAB_val);
  cvInRangeS(imgHsv, min_color,max_color, imgResult);//search for the color in image

  cvCvtColor( imgResult, test,CV_GRAY2RGB);
  cvShowImage("Result", test);
  cvReleaseImage(&test);
}

void Allocate_imgs()
{
  const int w = img->width;
  const int h = img->height;
  imgResult = cvCreateImage(cvSize(w, h), IPL_DEPTH_8U,1);
  imgHsv=cvCreateImage(cvSize(w, h), IPL_DEPTH_8U, 3);
4

1 に答える 1

0

1) cvCvtColor 関数を使用して画像を HSV 色空間に変換します。

2) HSV プレーンを分割して、H、S、V プレーンを分離します。

3) 次に、色の H、S、V 値、つまり、その色範囲内の値の範囲が必要です。

4) cvInrangeS 関数を使用して、その色のみを抽出します。それは白になり、他のすべての色は黒になります。

黄色のみを検出するコードが必要な場合は、このチュートリアルを試してください。

于 2012-01-28T17:45:29.580 に答える