[英]How to overlay text on image in opencv without modifying the underlying matrix
我需要一种在 opencv 图像上覆盖文本而不实际修改底层图像的方法。 例如,在一个 while 循环中,我为每次迭代创建一个随机点,我想显示它。 如果我使用 puttext,矩阵会在每个循环中被添加的文本覆盖。
我的问题是如何在 opencv 图像上覆盖文本而不修改底层矩阵。 我知道我可以使用原始图像的临时副本并每次上传。 但是我想避免它。
我的尝试(失败)如下:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char * argv[])
{
RNG rng( 0xFFFFFFFF );
cv::Mat image(480, 640, CV_8UC3, cv::Scalar(0,255,0));
int fontFace = FONT_HERSHEY_COMPLEX_SMALL;
double fontScale_small=1.5;
double fontScale_large=10.;
std::string text="X";
Point p;
while(1)
{
p.x = rng.uniform( 0, 639 );
p.y = rng.uniform( 0, 479 );
putText(image, "X", p, fontFace, 1, Scalar(0,0,255), 2);
imshow("IMAGE", image);
waitKey(1);
}
return 0;
}
If you are on OpenCV 3+ and have built OpenCV with Qt, then you can use the highgui functions on the Qt GUI window to overlay text, instead of actively modifying your image. 请参阅displayOverlay()
。 您还可以简单地更改状态栏文本,这有时更有用(这样您就不会覆盖图像或不必处理颜色冲突) displayStatusBar()
。 但是,请注意displayOverlay()
不允许您为文本指定特定位置。
如果没有 QT 支持,我认为这在 OpenCV 中是不可能的。 您需要通过putText()
或addText()
修改图像,或者滚动您自己的 GUI window,您可以在上面叠加文本。
您可以 output 将您的文本放在黑色图像上,然后与源图像进行异或以放置您的文本,第二个异或将从源图像中清除您的文本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.