这是我的第一个问题,谢谢你的阅读。
我正在尝试计算轮廓内轮廓的数量。
我找到了一个很好的教程,展示如何使用h_next和v_next
http://jmpelletier.com/a-simple-opencv-tutorial/问题是我使用Mat而不是IplImage。
我试着用:
垫* oimg;
但是当调用cvFindContours时,我得到一个错误。
我也试过使用findContours,这是建立与Mat工作,
通过遍历层次结构,但它不起作用
我正在使用c++和OpenCV2.0
谢谢分配,米尔
.
与其将cv::Mat
转换为IplImage
以使用C API,我建议直接使用cvFindContours()
: cv::findContours()
的c++版本。它不是构建一个真正的树状数据结构,而是被平化并存储在两个向量中:
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文档,了解如何解释hierarchy
(重点是我的):
hierarchy -可选的输出向量它将包含有关的信息图像拓扑。它将有许多元素作为数量轮廓。对于每个轮廓轮廓[i],元素层次结构[i][0];Hiearchyi, hiearchy[i][2];hiearchy[i][3] 将被设置为基于0的下一个和等高线的指数以前的轮廓相同等级级别,第一个子节点等高线和母等高线,分别。对于某些轮廓i没有下一个,上一个,父或嵌套等高线,对应层次结构的元素[i]将是-
在同一代码库中的C和c++ API之间切换确实会损害可读性。我建议只有当你需要的功能在c++ API中缺失时才使用C API。