python使用cv2在图片上标点
在 Python 中使用 OpenCV (cv2
) 在图片上标点(绘制点或小圆点)可以通过 cv2.circle()
函数实现。由于 OpenCV 没有直接提供“画点”的函数,通常可以通过绘制一个极小的圆来模拟标点效果。
方法:用 cv2.circle()
绘制小圆点
import cv2
import numpy as np# 创建黑色背景图像(或加载现有图像)
img = np.zeros((400, 400, 3), dtype=np.uint8) # 400x400 的黑色图像# 标点参数
point_center = (200, 200) # 圆心坐标 (x, y)
radius = 3 # 半径(像素,通常设为1-5)
color = (0, 0, 255) # 颜色(BGR格式,这里是红色)
thickness = -1 # 填充圆(-1表示实心)# 绘制点(小圆)
cv2.circle(img, point_center, radius, color, thickness)# 显示图像
cv2.imshow("Points on Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
参数说明
point_center
: 点的坐标,格式为(x, y)
(OpenCV 的坐标系原点在左上角)。radius
: 点的半径(像素),通常设为1
到5
,值越大点越明显。color
: 点的颜色,BGR 格式(例如(255, 0, 0)
是蓝色)。thickness
:-1
:填充圆(实心点)。- 正数:圆边框的粗细(但通常用
-1
绘制实心点更直观)。
示例扩展:在图像上标多个点
# 定义多个点的坐标
points = [(100, 100), (300, 100), (200, 300)]for (x, y) in points:cv2.circle(img, (x, y), 3, (0, 255, 0), -1) # 绿色实心点cv2.imshow("Multiple Points", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意事项
- 图像加载:如果是对现有图像标点,使用
cv2.imread()
加载图像:img = cv2.imread("path/to/image.jpg")
- 坐标范围:确保点的坐标在图像范围内(
0 ≤ x < img.shape[1]
,0 ≤ y < img.shape[0]
)。 - 抗锯齿:如需更平滑的点,可设置
lineType=cv2.LINE_AA
:cv2.circle(img, (x, y), 2, (255, 0, 0), -1, lineType=cv2.LINE_AA)
替代方案:直接修改像素值
如果需要更灵活地控制单个像素(不推荐,通常用 cv2.circle
更简单):
# 将 (x, y) 处的像素设为红色(BGR)
img[y, x] = [0, 0, 255]
但这种方法仅适用于单个像素,且无法直接设置点的半径或颜色透明度。