在opencv中使用findContours时出错

时间:2018-05-05 12:29:49

标签: c++ opencv mat opencv-contour

我想使用findContours处理黑白图像。

Mat frame= imread(argv[1]);
cvtColor(frame, frame, CV_BGR2GRAY);
threshold(frame,frame, 150, 255, THRESH_BINARY);
vector<vector<Point2f>> contours;
findContours(frame.clone(), contours, noArray(), CV_RETR_EXTERNAL, 
CV_CHAIN_APPROX_SIMPLE , Point(0, 0));

但我得到以下例外:

  

OpenCV错误:断言失败(mtype == type0 ||(((((mtype)&amp;((512)    - 1)&lt;&lt; 3))&gt;&gt; 3)+ 1)==((((type0)&amp;((512-1)&lt;&lt;&lt; 3))&gt;&gt; 3)+ 1)&amp;&amp; ((1&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&typex)&amp; fixedDepthMask)!= 0))在create,file中   /home/nvidia/opencv/modules/core/src/matrix.cpp,第2578行终止   抛出&#39; cv :: Exception&#39;的实例后调用什么():   /home/nvidia/opencv/modules/core/src/matrix.cpp:2578:错误:( - 215)   mtype == type0 || (((((mtype)&amp;((512-1)&lt;&lt; 3))&gt;&gt; 3)+ 1)==   ((((type0)&amp;((512-1)&lt;&lt; 3))&gt;&gt; 3)+ 1)&amp;&amp; ((1 <&lt; type0)&amp;   fixedDepthMask)!= 0)in function create。

用于findContours的图片:

enter image description here

。高度赞赏如何解决这个问题的任何指示。 感谢。

1 个答案:

答案 0 :(得分:1)

我运行了你的代码并发现了问题。您正在使用cv::Point2f来存储轮廓,而您应该使用cv::Point。只需编辑第4行即可:

vector<vector<Point>> contours