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

如何让OpenCV生成特定路径的内部凸包(无参数、无形态学操作)

问题:生成包围凹区域的内部凸包(无参数、无形态学操作约束)

现有实现

我有如下代码,用于完成以下操作:

  1. 读取灰度掩码
  2. 计算轮廓
  3. 生成凸包并绘制到结果图像上

输入为任意形状的灰度掩码(如圆形、椭圆形、矩形等)。

cv::Mat mask = cv::imread("testdata//polar.png", cv::IMREAD_GRAYSCALE);
cv::Mat result;
cv::cvtColor(mask, result, cv::COLOR_GRAY2BGR);
            
std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(mask, contours, hierarchy, cv::RetrievalModes::RETR_LIST, cv::ContourApproximationModes::CHAIN_APPROX_NONE);
    
std::vector<std::vector<cv::Point>> hull(contours.size());       
for (auto  i = 0; i < contours.size(); ++i)
{
    cv::convexHull(contours[i], hull[i], false);        
    cv::drawContours(result, hull, i, cv::Scalar(0, 0, 255), 2);
}
    
cv::imwrite("C:\\TEMP\\stackOverflowResult.png", result);

当前问题

现有代码会将内部和外部凸包都以红色绘制。从凸包的面积与原理来看,当前结果是正确的,但我需要内部凸包沿绿色路径生成——以此包围凹区域用于检测,外部凸包的结果符合预期即可。

请问在不使用形态学操作的约束下,如何让OpenCV的凸包算法生成这种绿色路径的内部凸包?需要一个无参数的解决方案。

我曾尝试过形态学操作和OpenCV的convexityDefects,这些方法在测试中能生效,但需要调参,不符合我的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:28:35