Перейти к содержимому
Compvision.ru
cooller51190

Рисование объекта на изображение

Recommended Posts

Необходимо в консольном приложение нарисовать  квадрат. Данное действие необходимо делать не через код, с заранее заданными координатами левого верхнего угла, ширины и высоты, Нарисовать необходимо с помощью мыши. Подскажите как это сделать? И получить вывод консоли данных по данному объекту, начальную точку, ширину и высоту.

Нашел вот такой способ.

void myMouseCallback( int event, int x, int y, int flags, void* param)
{

  IplImage* img = 0;

  switch( event ){
  case CV_EVENT_MOUSEMOVE: 
    //printf("%d x %d\n", x, y);
    break;

  case CV_EVENT_LBUTTONDOWN:
    //printf("%d x %d\n", region_coordinates[0], region_coordinates[1]);  
    if (region_coordinates[0] != 0 && region_coordinates[1] != 0 && region_coordinates[2] == 0 && region_coordinates[3] == 0)
    {
      region_coordinates[2]=x; 
      region_coordinates[3]=y;
    }
    if (region_coordinates[0] == 0 && region_coordinates[1] == 0)
    {
      region_coordinates[0]=x; 
      region_coordinates[1]=y;
    }
    break;

  case CV_EVENT_RBUTTONDOWN: 
    break;
  case CV_EVENT_LBUTTONUP: 
    break;
  }
}

int main(int argc, char** argv)
{IplImage* image = 0;
// имя картинки задаётся первым параметром
        char* filename = argc == 2 ? argv[1] : "Image0.jpg";
        // получаем картинку
        image = cvLoadImage(filename,1);
        // клонируем картинку 
        printf("[i] image: %s\n", filename);
        assert( src != 0 );
        // окно для отображения картинки
        cvNamedWindow("Motion",CV_WINDOW_AUTOSIZE);

  for(;;)
  {
 
    cvSetMouseCallback( "Motion", myMouseCallback, (void*) image);
    if (region_coordinates[0] != 0 && region_coordinates[1] != 0 && region_coordinates[2] == 0 && region_coordinates[3] == 0)
      cvRectangle(image, cvPoint(region_coordinates[0],region_coordinates[1]), cvPoint(region_coordinates[0]+1,region_coordinates[1]+1), CV_RGB(0,0,255), 2, CV_AA, 0 );

    if (region_coordinates[0] != 0 && region_coordinates[1] != 0 && region_coordinates[2] != 0 && region_coordinates[3] != 0)
     cvRectangle(image, cvPoint(region_coordinates[0],region_coordinates[1]), cvPoint(region_coordinates[2],region_coordinates[3]), CV_RGB(0,0,255), 2, CV_AA, 0 );
    cvShowImage( "Motion", image );

    char c = cvWaitKey(20);
    if (c <=57 && c>= 48) 
    {
      dig_key=c-48; //key "0123456789"
    }
  }
  cvReleaseImage(&image);
  cvDestroyWindow( "Motion" );
  return 0;
}

Никак не могу понять как из этого вывести мне начальную координату верхнего левого угла, ширину и высоту квадрата.  А так же если нарисовали не верно, то по нажатию кнопки убрать его. Подскажите, кто знает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×