python - 如何画圆并在上面写字
问题描述
这是代码的样子:
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)
如何以与参考图像相同的方式将数字放在圆圈上?代码中给出的像素用于第一个位置。
编辑:我在 Stackoverflow 上尝试了这个解决方案,它给出了这个结果 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)
编辑:
有没有办法不让第二行中的圆圈相互重叠?是否可以不让圆圈覆盖文字?
解决方案
您可以使用不同的库。我认为而不是 opencv matplotlib
,bokeh
或者seaborn
应该更适合这种工作。您可以对scatter plot
其中任何一个进行 a 并用数字标记您的点。我向你保证,它看起来会好很多。
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 对于像你这样的任务来说不是那么实用。希望这有帮助。祝你好运。:)
推荐阅读
- terraform - 将新权限附加到 AWS 中的角色
- r - 从点到原点的ggplot线和余弦分数
- r - 在 data.table 中创建链索引/迭代组中的行
- android - 我可以在不启动新包名称的情况下对我的应用程序进行全面改造吗?
- c++ - 线性斐波那契实际代码的伪代码
- apache-spark - 如何在 Kubernetes 上运行 Spark Standalone master,它将使用 Kubernetes Cluser Manager 来启动 worker
- ms-word - 如何使用 OOXML 以编程方式检测复杂的 scipt?
- express - 在 PATCH 请求期间要散列的密码
- windows - 用于连接 SFTP 服务器的 Windows 批处理脚本
- r - 按线 ID 将空间点属性附加到空间线数据框