如何在opencv中查找图像中每个连接组件的边界像素

如何在opencv中查找图像中每个连接组件的边界像素,c,matlab,opencv,C,Matlab,Opencv,我有一个带有文本的图像,我想找到每个连接组件的边界像素。我应该在opencv 2.3中使用哪种方法,我正在用c编写代码。 此函数可能与matlab的边界类似 谢谢,OpenCV中没有实现这样的功能。 您应该搜索形态学操作(图像的减法部分和放大的相同部分)或查看cvbloblib 它正是为此目的而开发的;) 您可以使用cvFindContours(这是版本1.0的调用,但在2.3中应该有类似的调用)在OpenCV 2.3中,调用了您想要的函数。每个轮廓(即连接组件的边界)存储为点向量。以下是如何

我有一个带有文本的图像,我想找到每个连接组件的边界像素。我应该在opencv 2.3中使用哪种方法,我正在用c编写代码。 此函数可能与matlab的边界类似


谢谢,

OpenCV中没有实现这样的功能。 您应该搜索形态学操作(图像的减法部分和放大的相同部分)或查看cvbloblib


它正是为此目的而开发的;)

您可以使用cvFindContours(这是版本1.0的调用,但在2.3中应该有类似的调用)

在OpenCV 2.3中,调用了您想要的函数。每个轮廓(即连接组件的边界)存储为点向量。以下是如何在C++中访问轮廓:

vector<vector<Point> > contours;
cv::findContours(img, contours, cv::RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
for (size_t i=0; i<contours.size(); ++i)
{
    // do something with the current contour
    // for instance, find its bounding rectangle
    Rect r = cv::boundingRect(contours[i]);
    // ...
}

c->h_next
指向与当前轮廓处于同一层次的下一个轮廓,
c->v_next
指向当前轮廓内的第一个轮廓(如果有)。当然,如果您像上面那样使用
CV_RETR\u EXTERNAL
c->v_next
将始终为
NULL

那么,也许在阅读cvbloblib代码示例时?我已经给了你链接:)我认为这不公平。网页的最后有一个代码示例。我会很乐意帮助一个稍作探索的人来解决他的问题。网络上有大量关于findcontours和cvbloblib的信息,用户1140170的问题中没有出现任何问题谢谢我在2.3中也找到了它。你能解释一下CvSeq**在这方面的含义吗?每个CvSeq*结构存储一个连接的组件。谢谢你的回答。我用C来做这件事。所以我将不得不使用cvFindContours。对此有什么建议吗?我如何给轮廓界定的ROI上色?
vector<vector<Point> > contours;
Hierarchy hierarchy;
cv::findContours(img, contours, hierarchy, cv::RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
// do something with the contours
// ...
CvSeq *contours;
CvMemStorage* storage;
storage = cvCreateMemStorage(0);
cvFindContours(img, storage, &contours, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
CvSeq* c;
for(c=contours; c != NULL; c=c->h_next)
{
    // do something with the contour
    CvRect r = cvBoundingRect(c, 0);
    // ...
}