使用opencv显示图像和文本

时间:2017-07-11 15:20:44

标签: opencv

使用opencv,我们可以在图像上显示文本。标准方法是

cv2.putText(img, "my_text", (x, y), font, 1.0, (255, 255, 255), 0)

但我希望显示一个小图标图像,后跟文字(在本例中为“my_text”)。

我可以用这种方式在图像上叠加图像:

icon_img = cv2.imread("icon.png")
icon_img1= cv2.resize(icon_img, (20,20))

x_offset=y_offset=5
img[y_offset:y_offset+icon_img1.shape[0], x_offset:x_offset+icon_img1.shape[1]] = icon_img1

但我希望图标随显示文字一起移动。

图标可能如下所示

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:1)

这在opencv中确实不可能。

Opencv在其基本GUI中没有z层的概念,因此您将负责设置图像中每个元素的位置。 Opencv的GUI并没有真正开发成为完整成熟应用程序的界面,而是更多用于测试和开发目的。如果你真的想要一个完整的GUI我推荐Qt或wxPython。

然而,对于这个非常基本的问题,你可以做的就像是

import pytest
from selenium import webdriver

# Method to handle the command line arguments for pytest
def pytest_addoption(parser):
    parser.addoption("--driver", action="store", default="chrome", help="Type in browser type")
    parser.addoption("--url", action="store", default='https://www.ibm.com', help="url")


@pytest.fixture(scope='module', autouse=True)
def browser_driver(request):
    browser = request.config.getoption("--driver").lower()
    # yield the driver to the specified browser
    if browser == "chrome":
        driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
    else:
        raise Exception("No driver for browser " + browser)
    yield driver
    driver.quit()


@pytest.fixture(scope="module")
def url(request):
    return request.config.getoption("--url")

这会将文本移到图像后面,就在图像的右下角

答案 1 :(得分:1)

我不确定我明白你在做什么,但我知道你想在视频的框架周围的不同位置放置带有相关文字的图标,是吗?而且我假设您希望文本与图标保持相同的位置,是吗?

如果是这样的话,我会创建一个小的“画布”(即Mat),其大小足以容纳图标和文本,并将它们放在上面。

然后,当每个视频帧到达时,在视频帧中创建一个ROI,并使用copyTo()在视频帧的顶部复制那一小块画布:

// define image ROI at bottom-right of video frame
cv::Mat imageROI(frame, cv::Rect(frame.cols-canvas.cols,
                                 frame.rows-canvas.rows,
                                 canvas.cols,canvas.rows));

// insert icon canvas
canvas.copyTo(imageROI);
相关问题