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

问题描述 投票:0回答:2

我需要一种无需实际修改基础图像即可在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;
}
image opencv text overlay
2个回答
0
投票

您可以在黑色图像上输出文本,然后对源图像进行XOR,以放置文本,第二个XOR将从源图像中清除文本。


0
投票

如果您使用的是OpenCV 3+,并已使用Qt构建了OpenCV,则可以在Qt GUI窗口上使用highgui函数来覆盖文本,而不用主动修改图像。参见displayOverlay()。您也可以简单地更改状态栏文本,有时使用displayOverlay()会更有用(这样您就不会覆盖或出现颜色冲突)。

© www.soinside.com 2019 - 2024. All rights reserved.