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.
我需要一个代表单个轮廓的类并集成轮廓分析方法.我知道CONTOUR是一个与矢量< Point>不同的类型.但是因为它扩展了后者,所以不应该是CONTOUR也是矢量< Point>类型(并且以相同的方式向量< CONTOUR>也是向量< vector< Point>>)?我错了吗?
请注意,如果您将CONTOUR声明为派生自vector< vector< Point>>的类.并在下面的代码中声明Ctr作为CONTOUR对象代替向量< CONTOUR>一切顺利.
提前谢谢了.
这是我的代码
#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,CV_BGR2GRAY); Canny(img,20,80,3); findContours(img,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)); drawContours(shape,i,color,1,8); } imshow("VIDEO",shape); if(waitKey(30) >= 0) { break; } } } } else { cout << "Camera not opened" << endl; } return 0;}解决方法 首先,请允许我这样说:尝试以多态方式使用标准库容器是 Bad Idea.不要这样做.在你的情况下甚至没有必要.
解决问题很简单:省去CONTOUR类并传递一个向量< vector< cv :: Point>>.这是因为cv :: findContours()要求你传递一个或等效的cv :: Mat.这是因为它使用代理类型作为参数,只能从这些类型构造,因此断言失败.如果要为轮廓定义速记,请使用typedef std :: vector< cv :: Point>轮廓,而不是#define轮廓.这为您提供了类型安全的好处.
另外,矢量< CONTOUR>与vector< vector< Point>>的类型不同.即使CONTOUR继承自vector< cv :: Point>,它们也是不同的类型.因此,它们的载体也是不同的类型. This answer也可能有助于理解这个问题.
此外,我注意到在您的代码中,CONTOUR派生自vector< cv :: Point>.这个断言表明你需要一个向量向量:vector< vector< cv :: Point>> ;.
总结以上是内存溢出为你收集整理的c – findcontours断言失败全部内容,希望文章能够帮你解决c – findcontours断言失败所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)