寻找凸缺陷?在OpenCV 2.3, c++和MS Visual Studio2010中
Finding convex defects? in OpenCV 2.3, c++ with MS Visual Studio2010
我目前正在尝试使用OpenCV 2.3和c++来检测手(戴着绿色手套),并区分不同的手势。
此时此刻,我的下一步是获取手的特定特征(凸缺陷)。
到目前为止,我已经在我的进程中使用了这些函数:mixChannels(); //to subtract non-green channels from green.
threshold(); //to convert to binary
erode(); dialate(); //to get rid of any excess noise
findContours(); //to find contours of course
这些工作非常出色,我已经能够通过使用drawContours()
输出findContours()
。
下一步,这就是我所在的地方,正在使用convexHull()
,这也适用于OpenCV 2.3。然而,我还没有发现convexHull()
的矢量结果实际上是怎样的(它们包含什么特征)。
但这就是棘手的部分。
我发现旧版本的OpenCV(使用c使用IplImage
),有一个整洁的小函数称为cvConvexityDefects()
,它可以在凸包上给出一组缺陷。这些是我需要的,但似乎没有这样的功能为OpenCV 2.3,我不知道我怎么能使用旧的语法来获得这些结果。
这是cvConvextDefects
上Open CV文档的链接。
我所要求的,要么是一个类似的OpenCV 2.3函数,要么是一个自己编写的代码或算法来发现这些缺陷。或者使用旧的2.1语法来处理向量结果或类似的东西。
(我知道我可以使用其他特征,矩形边界框和拟合圆。但我确信凸缺陷产生了最可区分的特征。
解决方案-我最终使用c++包装器从这篇文章这个包装器唯一不能工作的地方似乎是缺陷向量,这应该是很容易解决的。
下一步是从这些缺陷中获得一些可用的数据。(乍一看。数据似乎是凸壳或等高线上的单点,或者它们的计数。起初我以为是两点的集合,或者是一个点和一个长度的集合,但事实似乎并非如此。如果我在这篇文章中碰到了"砖墙",我就再写一篇
新的c++接口(还)不支持C中的所有函数,反之亦然(并非cpp中的所有函数都是C中的)。原因是多种多样的,但好消息是您可以轻松地使用您想要的任何函数。例如,这里您必须将轮廓转换为序列(CvSeq)并将它们发送到您的函数。
此外,FindContours方法是cvFindContours的包装。你可以把它命名为
cvFindContours((IplImage*)matImage, ...);
,然后直接使用结果。
另一种方法是在cvConvexDefects()上创建一个漂亮的、干净的c++包装器,并将其提交给OpenCV。在findContours源代码中,你会找到一些帮助(相反的转换)
我想尝试将我的convexHull向量从c++语法转换为您提到的序列,但我不知道从哪里开始。你能解释一下吗?
在这里看看这个问题,我相信它是深入的。
凹凸性缺陷c++ OpenCv
- 如何在MS Visual Studio 2019中运行QT UI
- 在C++中调用 MS SQL 存储过程
- MS Visual Studio 解决方案结合了非托管C++项目和 C# 项目
- MS 本机单元测试 - 断言::线程失败不起作用
- 为什么我不能在同一 MS VS 解决方案中的两个控制台应用中使用C++特征(仅标头库)?
- 使用 MS 绕道挂钩在调用钩子函数时崩溃C++
- Windows Toast 通知不适用于 MS CPP 示例代码
- 无法编译 ms _tzSet() 示例
- 从现有源创建 MS Visual C++ DLL 项目
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- 带有unique_ptr的通用单链表,MS visual studio C++中存在未知错误
- 连接到MS SQL的程序类型超出范围
- cl.exe在哪里?(MS 构建工具 '13)
- Python:在Windows上选择C++编译器 - MS Visual Studio到Mingw-w64.(PySta
- 如何从 avi 文件中抓取所有帧 - 如何修改 MS 样本采集卡样本
- C++不正确,不需要重新声明类成员变量 MFC 手工解决方案/项目 MS VS 2015
- 当索引为 1 时,_BitScanReverse返回 0,这意味着根据 MS "no set bits were found"
- C++ API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL依赖项问题
- 在 Ubuntu 12.04 上运行,一个在 Windows 上的 MS Visual Studio 中用 c++11
- iOS 上的可恢复断言/断点,例如带有 MS 编译器的 __debugbreak()