You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OpenCV的drawContours()仅绘制轮廓点而非连线(Python)

解决方法:绘制轮廓近似的离散点

不用cv2.drawContours()(该函数默认会连接轮廓点成线),改为遍历近似轮廓的每个点,用cv2.circle()逐个绘制离散点即可,具体修改如下:

代码修改示例

假设你已经完成轮廓提取与近似的步骤:

# 已有的轮廓处理流程
cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
# 取面积最大的轮廓
cnt = max(cnts, key=cv2.contourArea)
# 计算轮廓周长并做近似
peri = cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, 0.02 * peri, True)

替换原有的cv2.drawContours()代码,改为以下绘制逻辑:

# 准备绘制画布(这里以mask转彩色为例,也可以直接用原图)
output = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)

# 遍历每个近似点,逐个绘制圆形点
for point in approx:
    x, y = point[0]  # 提取点的坐标(approx结构为[[[x,y]]])
    # 参数说明:图像、圆心坐标、点的半径、颜色(BGR)、填充厚度(-1为实心)
    cv2.circle(output, (x, y), 6, (0, 0, 255), -1)

# 展示结果
cv2.imshow("Approximated Discrete Points", output)
cv2.waitKey(0)

关键细节

  • approx是三维数组结构,每个点被包裹在两层列表中,所以需要用point[0]取出实际的(x,y)坐标
  • 可根据需求调整cv2.circle()的半径(比如6)和颜色(比如红色(0,0,255))
  • 如果要在原图上绘制,直接将output替换为你的原图变量即可

内容的提问来源于stack exchange,提问作者pranav nerurkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:55:18