OpenCV - есть что-нибудь вроде удаления текста? - PullRequest
1 голос
/ 02 декабря 2010

Мне нужна такая вещь, потому что мне кажется, что когда я делаю

cvRectangle( CVframe, UL, LR, CV_RGB(0,256,53), CV_FILLED);
    string cvtext;
    cvtext += timeStr;
    cvPutText(CVframe, cvtext.c_str(), cvPoint(0,(h/2+10)), &font , CV_RGB(0,0,0));

каждый раз, 24 раза в секунду, cvRectangle не перекрывает старый текст ...

1 Ответ

6 голосов
/ 02 декабря 2010

Нет встроенного cvDeleteText или чего-то подобного, и, вероятно, по уважительной причине.Всякий раз, когда вы помещаете текст на изображение, оно перезаписывает пиксели на этом изображении, как если бы вы установили их значения на CV_RGB(0,0,0) по отдельности.Если вы хотите отменить эту операцию, вам нужно будет сохранить все, что было там заранее.Поскольку не все хотят это делать, было бы напрасной тратой времени и пространства, если бы cvPutText автоматически отслеживал пиксели, которые он записал.

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

//Initializing, before your loop that executes 24 times per second:
CvArr *CVframe, *CVframeWithText; // make sure they're the same size and format

while (looping) {
    cvRectangle( CVframe, UL, LR, CV_RGB(0,256,53), CV_FILLED);
    // And anything else non-text-related, do it to CVframe.

    // Now we want to copy the frame without text.
    cvCopy(CVframe, CVframeWithText);

    string cvtext;
    cvtext += timeStr;
    // And now, notice in the following line that 
    // we're not overwriting any pixels in CVframe
    cvPutText(CVframeWithText, cvtext.c_str(), cvPoint(0,(h/2+10)), &font , CV_RGB(0,0,0));
    // And then display CVframeWithText.

    // Now, the contents of CVframe are the same as if we'd "deleted" the text;
    // in fact, we never wrote text to CVframe in the first place.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...