2011-07-09 123 views
1

这是我的第一个问题,谢谢你的阅读。OpenCV:嵌套轮廓数

我想要计算轮廓内部轮廓的数量。

我找到了一个不错的教程演示如何使用h_next和v_next

http://jmpelletier.com/a-simple-opencv-tutorial/

的问题是我使用的垫子,而不是的IplImage。

我试图用它来转换它:

Mat * oimg; IplImage img = * oimg;

但是我调用cvFindContours时出错。

我也试过它内置有垫工作usign findContours,

通过的hierrarchy去,但它没有工作。

我usign C++和OpenCV2.0

感谢配发,

塔米尔。

+0

使用铸造:垫矩阵; iplimage * p; p =&((iplimage)矩阵) – DanielHsH

回答

3

相反转换cv::MatIplImage使用C API的,我建议直接使用的cvFindContours() C++版本:cv::findContours()。而不是建立一个真正的树数据结构,它是平的,存储在两个载体:

cv::Mat image = // ... 
std::vector<std::vector<cv::Point> > contours; 
std::vector<cv::Vec4i> hierarchy; 
cv::findContours(image, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE); 

检查C++ API documentation关于如何解释hierarchy(重点煤矿)的说明:

hiararchy - 可选的输出矢量 将包含有关图像拓扑的信息。它将有多个元素作为 轮廓的数量。对于每个轮廓的轮廓[I] ,元素层级[I] [0], hiearchy i,hiearchy [I] [2], hiearchy [I] [3] 将被设置为0的基于 指数在下一个和下一个轮廓以及相同的 层级,第一个子轮廓 和父轮廓 。如果由于某种轮廓我 没有下一个,上一个,父母或 嵌套轮廓,层次结构的相应 元素[I]将是C和C在相同的基本代码++ API之间 负

切换真的很伤心可读性。如果您需要的功能从C++ API中丢失,我建议只使用C API。