cv2.PutText vs cv2.AddText 两者有什么区别?

cv2.PutText vs cv2.AddText what is the difference between the two?

我想使用 python cv2 模块将一些文本应用于图像。 我找到了两个可以做到这一点的 cv2 函数 cv2.putTextcv2.addText。我想知道各自的优缺点。

谢谢

就像第一条评论中的 Yunus 一样,我还不知道 addText 函数。并且必须先做一些研究。

在c++源代码中,这两个函数是在不同的模块中实现的。 imgproc中的putText函数和highgui模块中的addText函数。据我所知,后者旨在轻松创建 GUI。我猜应该在此 GUI 上下文中使用 addText 函数。

这是我在 python 中找到的关于 addText 的唯一文档:https://kite.com/python/docs/cv2.addText 到目前为止,这个电话看起来是一样的。尽管如此,我在执行以下程序时遇到以下错误:

img = cv2.imread("img url")

t = time.time()
cv2.putText(img, "Hello", (20,20), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0))
print(str(time.time() - t))
t = time.time()
cv2.addText(img, "World", (50,20), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0))
print(str(time.time() - t))

cv2.imshow("test", img)
cv2.waitKey(0)

错误:

Traceback (most recent call last):
   File ".../test.py", line 20, in <module>
      main()
   File ".../test.py", line 12, in main
      cv2.addText(img, "World", (50,20), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0))
SystemError: <built-in function addText> returned NULL without setting an error

将其放入您的优缺点列表中:

put文本: + 作品 + 通常使用 - 没有

添加文本: (+) 可能在 gui 中可用 - 找不到工作文档

为了完整性而添加并最终收集更多信息:

实际上 cv2.AddText 似乎是在 Qt 上下文中使用的,如果你编译带有 Qt 支持的 OpenCV。有关更多 API 和用法,请参阅 this page

但是如果您打开控制台并插入以下命令以了解 Python OpenCV 支持:

import cv2   # version 4.5.0 complied with Qt support
res = [f for f in dir(cv2) if 'Text' in f]
print(res)
['addText', 'getTextSize', 'putText', 'text_TextDetector', 'text_TextDetectorCNN', 'ximgproc_segmentation_SelectiveSearchSegmentationStrategyTexture']

我们可以看到 addText 和 putText。

但是,如果我们在文档中搜索“fontQt”函数 (this page):

res = [f for f in dir(cv2) if 'fontQt' in f]   # no results for 'Qt' also
print(res)
[]

所以看起来 Qt 字体支持应该在 OpenCV 中可用,但没有 Python 包装器。