Определите цветовую гамму изображения, используя Qt и openCV - PullRequest
0 голосов
/ 28 января 2012

Как определить один цвет без использования трекбара (определить один цветовой диапазон)?Я пытаюсь получить все цветные объекты в этом диапазоне, и я использую 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);

1 Ответ

0 голосов
/ 28 января 2012

1) преобразовать изображение в цветовое пространство HSV с помощью функции cvCvtColor.

2) Разделить плоскость HSV на отдельные плоскости H, S, V.

3) Далее вам нужно H, S,Значения V для вашего цвета, я имею в виду диапазон значений в этом цветовом диапазоне.

4) Теперь используйте функцию cvInrangeS, чтобы извлечь только этот цвет.Он станет белым, а все остальные цвета станут черными.

Теперь, если вам нужен код для определения только желтого цвета, попробуйте этот учебник .

...