3

我正在编写 C(不是C++)代码来在矩形轮廓上运行凸包。(大大简化的)代码如下所示:

CvSeq* contours;
CvSeq* hull;

cvFindContours( img, &contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, CvPoint(0,0) );
hull = cvConvexHull2( contours, storage, CV_CLOCKWISE, 0 );

Whereimgcontours都是有效的。这些行之间还有很多内容,但其中的 FindContours 部分已经过测试可以正常工作。

此代码引发异常:错误:cvApproxPoly 中的参数错误(不支持的序列类型)

有人告诉我,问题是没有设置将序列标识为折线的标志,我已经尝试过这个建议hull->flags = hull->flags | 512,但可能这些标志在 2008 年到现在之间的某个时间发生了变化,因为这不起作用。

所以问题是:如何在 cvConvexHull2() 的结果上使用 cvApproxPoly()?我应该使用什么数据类型,cvApproxPoly() 的正确参数是什么?

4

1 回答 1

3

我认为您缺少存储参数:

cvFindContours(<CvArr *image>, <CvMemStorage *storage>, <CvSeq **first_contour>, <int header_size>, <int mode>, <int method>, <CvPoint offset>)

测试使用

CvMemStorage *storage = cvCreateMemStorage(0);
cvFindContours( img, storage, &contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, CvPoint(0,0) );
hull = cvConvexHull2( contours, storage, CV_CLOCKWISE, 0 );
于 2012-12-21T10:26:36.597 回答