Как наложить текст на изображение в opencv без изменения базовой матрицы - PullRequest
0 голосов
/ 05 октября 2019

Мне нужен способ наложения текста на изображение 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;
}

Ответы [ 2 ]

3 голосов
/ 06 октября 2019

Если вы используете OpenCV 3+ и создали OpenCV с Qt, то вы можете использовать функции highgui в окне Qt GUI для наложения текста вместо активной модификации вашего изображения. См. displayOverlay(). Вы также можете просто изменить текст в строке состояния, что иногда более полезно (чтобы вы не закрывали изображение или не сталкивались с цветными столкновениями) с помощью displayStatusBar(). Однако обратите внимание, что displayOverlay() не позволяет вам указывать конкретные позиции для вашего текста.

Без поддержки QT я не верю, что это возможно в OpenCV. Вам нужно будет либо изменить изображение с помощью putText() или addText(), либо развернуть свое собственное окно графического интерфейса, в котором вы можете наложить текст.

0 голосов
/ 06 октября 2019

Вы можете вывести ваш текст на черном изображении, затем сделать XOR с исходным изображением для размещения вашего текста, а второй XOR очистит ваш текст от исходного изображения.

...