OpenCV(Python)生成图像添加图例的可行方法咨询
为OpenCV图像添加图例的替代方案
OpenCV本身没有内置的图例绘制函数,除了cv2.putText外,你可以试试以下两种更简便的方法:
方法1:结合Matplotlib绘制
既然用的是Python,可以把OpenCV的图像转成Matplotlib支持的格式,借助其自带的图例功能:
import cv2 import matplotlib.pyplot as plt # 假设I是你的BGR格式图像 rgb_I = cv2.cvtColor(I, cv2.COLOR_BGR2RGB) # OpenCV是BGR,Matplotlib用RGB # 绘制图像和标记点 plt.imshow(rgb_I) plt.scatter(xy[0], xy[1], c='blue', s=10, label='XY点') plt.scatter(uv[0], uv[1], c='red', s=10, label='UV点') plt.legend() plt.show()
这种方法无需手动计算文本位置,Matplotlib会自动生成规整的图例。
方法2:手动绘制简易图例块
如果不想依赖Matplotlib,可以在图像角落绘制一个独立的图例区域,比逐个调用cv2.putText更高效:
import cv2 import numpy as np # 创建白色背景的图例区域 legend_h, legend_w = 40, 120 legend = np.ones((legend_h, legend_w, 3), dtype=np.uint8) * 255 # 在图例上绘制标记点和对应文字 cv2.circle(legend, (15, 20), radius=1, c=(255,0,0), thickness=1) cv2.putText(legend, 'XY点', (30, 23), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,0), 1) cv2.circle(legend, (15, 35), radius=1, c=(0,0,255), thickness=1) cv2.putText(legend, 'UV点', (30, 38), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,0), 1) # 将图例拼接至原图像右上角(可调整位置) I[0:legend_h, I.shape[1]-legend_w:I.shape[1]] = legend # 显示图像 cv2.imshow('', I) cv2.waitKey(0) cv2.destroyAllWindows()
这种方法只需拼接一次图例区域,操作比单独给每个点加说明更省心,适配纯OpenCV的工作流。
你的OpenCV 4.1.2版本和Python 3.7.5环境完全兼容以上两种方案。
内容的提问来源于stack exchange,提问作者yonatan
相关产品推荐
相关产品推荐

