问题标签 [opencv-contour]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
658 浏览

python - 使用 OpenCV 检测图像中不同颜色的岛屿

假设我有一张具有单一彩色背景(比如黑色)的图像,其中有很多不同颜色的“岛屿”。想象一个黑色背景,上面散布着红色、黄色和绿色的色块。我想要一个可以在所有这些补丁周围绘制轮廓的程序。我正在将opencv与python一起使用。如果颜色是预定义的,我已经找到了绘制轮廓的程序。如果没有,我该怎么办?这些补丁没有特定的形状。

0 投票
1 回答
737 浏览

opencv - OpenCV 轮廓演化

我有一个轮廓,我想“捕捉”到图像的边缘。也就是说,类似于智能剪刀的东西,但对于整个轮廓都是一样的。用户提供了对象轮廓的粗略草图,我想通过将轮廓上的每个点“推”到边缘图像中最近的点来清理它。

OpenCV中是否存在类似的东西?

0 投票
1 回答
2084 浏览

python - 用opencv检测弯曲形状的中心

我一直在尝试找到弯曲形状的中心(例如香蕉)。我可以做所有的基础工作,例如创建二值图像和定位轮廓。但是,centroid 函数正确地找到了轮廓之外的点。我需要的点必须在轮廓内。我附上了一张可以更好地解释事情的图片。

如果有人有任何想法,或者看到类似的东西,我将非常感谢一些帮助。

在此处输入图像描述

0 投票
1 回答
808 浏览

python-2.7 - 试图在激光笔上画圆,OpenCV

所以我从@bradmontgomer 的 Github 获取代码并尝试修改它。代码首先将帧转换为 HSV 颜色空间,将视频帧拆分为颜色通道,然后对 HSV 组件执行 AND 以识别激光。我无法找到检测到的激光点的轮廓。这是我的代码;

我在“if len(cnts) > 0:”行中得到大于 0 的 cnts,但看不到激光笔中绘制的圆圈。这是视频的静止帧,指向激光点。

0 投票
1 回答
592 浏览

c++ - findContours 中的分段错误

我在运行时遇到分段错误错误,以便下面的代码找到轮廓。我已经在这个表格上提到了这篇文章,但对我没有多大帮助。我知道 findContours 存在一些问题findContours的另一个问题。请检查两个链接并帮助我解决此错误。我不知道为什么我会收到分段错误错误。

错误:

0 投票
1 回答
1182 浏览

python - 我使用 python 和 opencv3 对直播中最大的图像进行轮廓处理,看起来我的代码出错了,谁能帮帮我

我使用 python 和 opencv3 对直播中最大的图像进行轮廓处理,看起来我的代码出错了,谁能帮帮我

这段代码有两个问题:

0 投票
0 回答
169 浏览

c++ - 如何从框架中删除小轮廓?

我已经编写了程序来检测水中(游泳池)中的物体。但我得到了很多其他轮廓,如此屏幕截图所示。但这是真实的形象。请帮助我摆脱视频中检测到的其他不需要的轮廓。下面是我写的代码。

0 投票
1 回答
3406 浏览

python - opencv:在numpy数组上查找轮廓

我正在尝试在二进制图像中找到轮廓,这是一个 numpy 数组

当我尝试运行该代码时,出现此错误

0 投票
1 回答
442 浏览

android - 使用 OpenCV4Android,如何从轮廓创建 ROI(感兴趣区域或子垫)?

给定图像Mat和其中的轮廓(即 a MatOfPoint),如何创建 ROI(感兴趣区域)/submat?

我可以在 的文档上Mat看到三种有趣的方法,

Mat submat(int rowStart, int rowEnd, int colStart, int colEnd) 提取一个矩形子矩阵。

Mat submat(Range rowRange, Range colRange) 提取一个矩形子矩阵。

Mat submat(Rect roi) 提取一个矩形子矩阵。

  1. 有没有办法从轮廓中 找出rowStart,rowEnd和?colStartcolEnd

或者

  1. 有没有办法从轮廓中获取rowRange和获取?colRange

或者

  1. 我可以Rect从轮廓上做一个吗?
0 投票
1 回答
516 浏览

opencv - 为什么 OpenCV 中的 drawContour() 会生成这个奇怪的 Mask?

我从阅读这个开始Mat

在此处输入图像描述

然后我将其转换为灰度并应用于Imgproc.canny()它,得到以下蒙版。

在此处输入图像描述

然后我曾经Imgproc.findContours()找到轮廓,Imgproc.drawContours(),并Core.putText()用数字标记轮廓:

在此处输入图像描述

然后我做Rect boundingRect = Imgproc.boundingRect(contours.get(0)); Mat submatrix = new Mat(); submatrix = originalMat.submat(boundingRect);了以下事情submatrix

在此处输入图像描述

到现在为止还挺好。问题从此开始:

现在我需要一个面具submatrix。所以我决定用Imgproc.drawContours()得到面具:

我得到了以下面具:

在此处输入图像描述

我期待的是黑色背景上的填充(白色)钻石形状。

为什么我会得到这个意想不到的结果?


编辑:

  1. 当我替换Mat mask = new Mat(submatrix.rows(), submatrix.cols(), CvType.CV_8UC1);Mat mask = Mat.zeros(submatrix.rows(), submatrix.cols(), CvType.CV_8UC1);时,最后一个带有白色垃圾的蒙版被一个空的黑色蒙版替换,上面没有任何白色。我得到了以下子垫和掩码:

    在此处输入图像描述 在此处输入图像描述

  2. 我得到了轮廓列表(命名 contours)中的contours.get(0)第一个轮廓,并使用这个第一个轮廓来计算Imgproc.boundingRect()以及 contourList.add(contours.get(0));稍后(其中contourList只有一个轮廓的列表将在最后一个中使用 drawContours())。

    然后我继续更改contours.get(0)contours.get(1)inImgproc.boundingRect()以及 in contourList.add();(就在之前Imgproc.drawContours())。这导致了这个子垫和掩码:

    在此处输入图像描述 在此处输入图像描述

  3. 然后我改回contours.get(0)in Imgproc.boundingRect(); 并 contourList.add(contours.get(1));在那里。得到以下子垫和掩码:

    在此处输入图像描述 在此处输入图像描述

现在我完全无法理解这里发生了什么。