OpenCV cvDrawContours vs drawContours

时间:2014-08-15 13:55:58

标签: c++ opencv visual-studio-2012 contour

我是在Visual Studio上使用OpenCV的新手,我最近重新安装了我的VS2012以使用OpenCV 2.4.2来使其工作。

我正在尝试通过鼠标单击顶点并将它们推送到CvSeq *来计算指定区域的区域,以与contourArea()函数一起使用。

我目前正在尝试解析一个空的CvSeq *作为我的自定义鼠标回调函数的最后一个参数,以便我可以添加由x和y坐标组成的CvPoint。但是,每当我尝试访问CvSeq *轮廓后,我都会收到错误。所以在下面的代码片段中:

void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{

    CvSeq* contour = (CvSeq*)userdata;
    CvPoint cur;
     if  ( event == EVENT_LBUTTONDOWN )
     {
          cout << "Left button of the mouse is clicked - position (" << x << ", " << y << ") saved as point" << endl;
          // save x,y as a contour point
          cur = cvPoint(x,y);
          cvSeqPush(contour, &cur);
...

我得到正确的cout消息,但在尝试使用CvSeq *绘制轮廓时会出现这样的错误: opencvtest.exe中0x75E3812F处的未处理异常:Microsoft C ++异常:cv ::内存位置0x001FF990处的异常。

这是什么问题?我会不会尝试使用Vector&gt;而不是CvSeq?

1 个答案:

答案 0 :(得分:3)

  • cvDrawContours()来自旧的,已弃用的c-api,你应该使用它,或者任何旧的cv *函数。

  • drawContours来自当前的c ++ api,与cv :: Mat一起使用,来自cv :: namespace的函数。


另外,不要再担心CvSeq *或IplImage *了。如果你看到任何包含类似奥术的代码,那就继续吧。

&#34;尝试使用vector<vector<Point>>代替CvSeq会更好吗?&#34; - 是的。


另外,如有疑问,请查看samplesdocs