我是 C++ 和 opencv 的新手。我编写了一个简单的程序,您可以在下面找到它,但是当我运行它时,我总是会收到findContours(img, ctr, CV_RETR_LIST, CV_CHAIN_APPROX_NONE)
类型断言失败引发的异常
OpenCV 错误:在创建文件 C:\opencv\modules 时断言失败 (mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN (type0) && ((1 << type0) & fixedDepthMask) != 0)) \core\src\matrix.cpp,第 1466 行。
我需要一个代表单个轮廓并集成轮廓分析方法的类。我知道这CONTOUR
是一个不同的类型,vector<Point>
但由于它扩展了后者,不CONTOUR
应该也是一个vector<Point>
类型(同样vector<CONTOUR>
也是一个类型vector< vector<Point> >
)?我错了吗?
请注意,如果您声明CONTOUR
为派生自的类,并在下面的代码中vector<vector<Point>>
声明为对象,则一切正常。Ctr
CONTOUR
vector<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, 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;
}