OPENCV: я хочу рисовать основные фигуры в цикле, удаляя старые фигуры каждый раз, когда рисуется новая фигура - PullRequest
1 голос
/ 12 июля 2011

Я взял код из shape.c, приведенного в библиотеке opencv, и немного изменил его.

#include <stdio.h>
#include "cv.h"
#include "highgui.h"

int main(int argc, char** argv)
{
    int i = 0;
    for(i=0;i<3 ;i++)
   { 
    /* create an image */
    IplImage *img = cvCreateImage(cvSize(200, 100), IPL_DEPTH_8U, 3);

    /* draw a green line */
    cvLine(img,                         /* the dest image */
           cvPoint(10 +i*10, 10),             /* start point */
           cvPoint(150, 80),            /* end point */
           cvScalar(0, 255, 0, 0),      /* the color; green */
           1, 8, 0);                    /* thickness, line type, shift */

    /* draw a blue box */
    cvRectangle(img,                    /* the dest image */
                cvPoint(20, 15+i*10),        /* top left point */
                cvPoint(100, 70),       /* bottom right point */
                cvScalar(255, 0, 0, 0), /* the color; blue */
                1, 8, 0);               /* thickness, line type, shift */

    /* draw a red circle */
    cvCircle(img,                       /* the dest image */
             cvPoint(110, 60), 35+i*10,      /* center point and radius */
             cvScalar(0, 0, 255, 0),    /* the color; red */
             1, 8, 0);                  /* thickness, line type, shift */

    /* display the image */
    cvNamedWindow("img", CV_WINDOW_AUTOSIZE);
    cvShowImage("img", img);
    cvWaitKey(0);
    cvDestroyWindow("img");
    cvReleaseImage(&img);
    }     
    return 0;
}

Я хочу, чтобы при каждом увеличении i старые цифры удалялись и рисовались только новые.Но что я получаю, так это новые фигуры, также присутствуют старые фигуры. Можете ли вы мне помочь, пожалуйста?

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Когда вы создаете (пустое) изображение, единственный способ убедиться, что imageData является чистым, это сделать это самостоятельно, установив сплошной цвет.После cvCreateImage() вызова cvSet().

IplImage *img = cvCreateImage(cvSize(200, 100), IPL_DEPTH_8U, 3); 
cvSet(img, CV_RGB(0, 0, 0));

Вы можете улучшить производительность своего приложения, если вывести / уничтожить окно из цикла.Нет необходимости создавать новое окно для каждого нового изображения:

int i = 0;
cvNamedWindow("img", CV_WINDOW_AUTOSIZE);
for(i=0;i<3 ;i++)
{
    // code
}
cvDestroyWindow("img");
1 голос
/ 12 июля 2011

Прямого пути нет

  1. Инициализация фонового изображения
  2. Нарисуйте фигуру переднего плана на недавно клонированном фоновом изображении
  3. Нарисуйте еще одну фигуру на клонированном фоновом изображении
  4. Показывать их по одному
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...