如何画圆并在上面写字

Posted

技术标签:

【中文标题】如何画圆并在上面写字【英文标题】:How to draw circle and write on it 【发布时间】:2020-03-22 12:32:22 【问题描述】:

这是参考图片:

我需要像参考图像一样在上面画圆圈:

这是生成的图像:

这就是代码的样子:

img = cv2.imread("foot.png")
cv2.circle(img,(112,71), 4, (0,0,0), -1)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, '1', (112,71), font, 1, (84, 29, 108), 1, cv2.LINE_AA)


cv2.imwrite("test.png",img)

如何以与参考图像相同的方式将数字放在圆圈上?代码中给出的像素是第一个位置。

编辑: 我在 *** 上尝试了这个解决方案,它给出了这个结果 Draw Text inside circle OpenCV

编辑 1: 代码:

img = cv2.imread("foot.png")

CENTER = (112, 71)

cv2.circle(img, CENTER, 2, (127,0,127), -1)

TEXT_FACE = cv2.FONT_HERSHEY_DUPLEX
TEXT_SCALE = 1
TEXT_THICKNESS =1
TEXT = "0"

text_size, _ = cv2.getTextSize(TEXT, TEXT_FACE, TEXT_SCALE, TEXT_THICKNESS)
text_origin = ( int(CENTER[0] - text_size[0] / 2), int(CENTER[1] + text_size[1] / 2))

cv2.putText(img, TEXT, text_origin, TEXT_FACE, TEXT_SCALE, (127,255,127), TEXT_THICKNESS, cv2.LINE_AA)

cv2.imwrite('centertext_out.png', img)

输出:

编辑:

这是我到目前为止所取得的成就:

有什么办法不让第二行的圆圈相互重叠?可以不让圆圈覆盖文字吗?

【问题讨论】:

有一个函数可以告诉你绘制文本的位置和大小。您可以使用该功能来优化您的文本大小和位置。 【参考方案1】:

您可以使用不同的库。我认为而不是 opencv matplotlibbokehseaborn 应该更适合这种工作。您可以与其中任何人联系scatter plot,并用数字标记您的观点。我向你保证,它看起来会好很多。

正如您所要求的,这里是一个简单的示例。

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("your_image_here.png")

我只使用 opencv 来读取图像。然后在数组中按像素指定 x 和 y 坐标 .标签值也为 n。

x = [120,110,150,367,377,337]
y = [100,200,300,100,200,300]
n = [5.0,4.8,20.5,5.0,4.8,20.5]

然后我使用所需的选项(例如点大小、颜色、不透明度和标签大小)在图像顶部绘制点。

fig, ax = plt.subplots(figsize=(10, 10))

ax.imshow(img)
ax.scatter(x, y, s=200, alpha=0.7, c = "orange")

for i, num in enumerate(n):
    ax.text(x[i], y[i], num, fontsize=12)

这只是一个简短的演示。您还可以定义一个函数来根据标签值调整点颜色,或者如果点变得太拥挤,您可以使用另一个函数动态缩小它们。我想说的是,Opencv 对于像你这样的任务来说不是那么实用。 希望这有帮助。祝你好运。 :)

【讨论】:

您能分享一些有价值的资源或任何起点吗?谢谢(关于 tkinter)

以上是关于如何画圆并在上面写字的主要内容,如果未能解决你的问题,请参考以下文章

数学建模基于matlab GUI Smith画圆软件设计与演示含Matlab源码 2195期

在ArcGIS中怎么画圆

OpenCV C++如何使用mouseclickleft存储坐标和画圆

如何在 ES2.0 中使用 VBO 画圆

圆化视图的右上角和左上角?

scratch如何让画笔绘制的图案移动?