繁体   English   中英

如何在 opencv 中的图像上覆盖文本而不修改底层矩阵

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM