findcontours assertion failed
我是C++和OpenCV的新手。我已经编写了一个简单的程序,您可以在下面找到它,但是当我运行它时,总是会得到由类型断言失败引发的
OpenCV Error: Assertion failed (mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN
(type0) && ((1 << type0) & fixedDepthMask) != 0)) in create, file C:\opencv\modu les\core\src\matrix.cpp, line 1466.
我需要一个表示单个轮廓并集成轮廓分析方法的类。我知道
请注意,如果您声明
非常感谢。
这是我的密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include"opencv2/opencv.hpp" #include <vector> using namespace cv; using namespace std; class CONTOUR : public vector<Point> { public: CONTOUR() : vector<Point>(){ }; CONTOUR(const CONTOUR& orig) : vector<Point> (orig){ }; virtual ~CONTOUR(){ }; CONTOUR& operator=(const CONTOUR& rhs) { vector<Point> :: operator = (rhs); return *this; } CONTOUR& operator=(const vector<Point>& rhs) { vector<Point> :: operator = (rhs); return *this; } }; /** @function main */ int main(int argc, char** argv) { VideoCapture Camera; if(Camera.open(0)) { Mat img; namedWindow("VIDEO", CV_WINDOW_AUTOSIZE); for(;;) { Camera >> img; if(!img.empty()) { CONTOUR ctr; RNG n(12345); GaussianBlur(img, img, Size(5,5), 1.0, 1.0); cvtColor(img, img, CV_BGR2GRAY); Canny(img, img, 20, 80, 3); findContours(img, ctr, CV_RETR_LIST, CV_CHAIN_APPROX_NONE); Mat shape = Mat::zeros( img.size(), CV_8UC3 ); for( unsigned int i = 0; i< ctr.size(); i++ ) { Scalar color(n.uniform(0,255), n.uniform(0,255), n.uniform(0,255)); drawContours(shape, ctr, i, color, 1, 8); } imshow("VIDEO", shape); if(waitKey(30) >= 0) { break; } } } } else { cout <<"Camera not opened" << endl; } return 0; } |
首先,请允许我这样说:尝试以多态方式使用标准库容器是一个坏主意。不要这样做。在你的情况下甚至都没有必要。
解决问题的方法很简单:去掉
另外,
另外,我注意到在您的代码中,
findcontour函数中的断言失败错误仅由于编译器和opencv二进制文件不匹配。从项目属性中选择正确的编译器。