我需要这样的东西,因为在我看来,当我做
时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不覆盖旧文本...
答案 0 :(得分:6)
没有内置的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.
希望这有帮助!