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

OpenCV-Python中如何获取包含所有目标的单个最大外部轮廓?

解决方案

你当前代码是对每个独立轮廓分别计算凸包,所以得到多个小凸包。要获取包含所有目标的单个大轮廓,需要把所有轮廓的点合并后再计算整体凸包,具体实现如下:

修改后的代码

import cv2 as cv
import numpy as np

img_color = cv.imread('ex1.png')
img_gray = cv.cvtColor(img_color, cv.COLOR_BGR2GRAY)
ret, img_binary = cv.threshold(img_gray, 127, 255, 0)
_, contours, hierarchy = cv.findContours(img_binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

# 合并所有轮廓的点到一个统一集合
all_points = np.vstack(contours)
# 对合并后的点集计算整体凸包
hull = cv.convexHull(all_points)

# 绘制最终的单个大轮廓
cv.drawContours(img_color, [hull], 0, (0, 0, 255), 5)
cv.imwrite('save_image_final.png', img_color)

关键说明

  • np.vstack(contours) 将所有检测到的轮廓点垂直堆叠成一个大数组,确保涵盖所有目标的像素位置信息。
  • 基于合并后的点集计算凸包,就能生成完全包围所有目标的单个外轮廓,匹配你需要的期望效果。

如果后续处理的图像存在噪声干扰,可先对二值图执行形态学膨胀操作,让分散的目标区域产生一定连接,但针对你提供的示例图,直接合并点集求凸包即可达到需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:40:25