Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV马氏函数用于计算两幅图像之间的距离_C++_Opencv_Computer Vision - Fatal编程技术网

C++ OpenCV马氏函数用于计算两幅图像之间的距离

C++ OpenCV马氏函数用于计算两幅图像之间的距离,c++,opencv,computer-vision,C++,Opencv,Computer Vision,我正在使用OpenCV测试从同一环境中拍摄的两幅图像之间的相似性 我有一系列相同移动环境的照片。因此,作为A和B这两个二值图像的边缘的两个连续图像的环境,我做如下: Mat mean; mean.create(a.rows, a.cols, a.type()); mean += a; mean += b; mean/=2; Mat covar, mean; calcCovarMatrix(mean, covar, mean, COVAR_NORMAL | COVAR_ROWS, CV_8U

我正在使用OpenCV测试从同一环境中拍摄的两幅图像之间的相似性

我有一系列相同移动环境的照片。因此,作为A和B这两个二值图像的边缘的两个连续图像的环境,我做如下:

Mat mean;
mean.create(a.rows, a.cols, a.type());

mean += a;
mean += b;
mean/=2;

Mat covar, mean;

calcCovarMatrix(mean, covar, mean, COVAR_NORMAL | COVAR_ROWS, CV_8UC1);

Mat icovar = covar.inv();

std::cout<<"type a:"<<a.type()<<"\n";
std::cout<<"type b:"<<b.type()<<"\n";
std::cout<<"icovar type:"<<icovar.type()<<"\n";
std::cout<<"a cols:"<<a.cols<<"\n";
std::cout<<"a rows:"<<a.rows<<"\n";
std::cout<<"b cols:"<<b.cols<<"\n";
std::cout<<"b rows:"<<b.rows<<"\n";
std::cout<<"icovar cols:"<<icovar.cols<<"\n";
std::cout<<"icovar rows:"<<icovar.rows<<"\n";

double mahalDistance = Mahalanobis(a, b, icovar);
马氏距离函数抛出如下错误:

Mat mean;
mean.create(a.rows, a.cols, a.type());

mean += a;
mean += b;
mean/=2;

Mat covar, mean;

calcCovarMatrix(mean, covar, mean, COVAR_NORMAL | COVAR_ROWS, CV_8UC1);

Mat icovar = covar.inv();

std::cout<<"type a:"<<a.type()<<"\n";
std::cout<<"type b:"<<b.type()<<"\n";
std::cout<<"icovar type:"<<icovar.type()<<"\n";
std::cout<<"a cols:"<<a.cols<<"\n";
std::cout<<"a rows:"<<a.rows<<"\n";
std::cout<<"b cols:"<<b.cols<<"\n";
std::cout<<"b rows:"<<b.rows<<"\n";
std::cout<<"icovar cols:"<<icovar.cols<<"\n";
std::cout<<"icovar rows:"<<icovar.rows<<"\n";

double mahalDistance = Mahalanobis(a, b, icovar);
OpenCV错误:Mahalanobis中的断言失败type==v2.type&&type==icovar.type&&sz==v2.size&&len==icovar.rows&&len==icovar.cols,file/Users/felipefujioka/Documents/Developer/tg/OpenCV-3.0.0-beta/modules/core/src/matmul.cpp,第2486行 libc++abi.dylib:cv::exception:/Users/felipefujioka/Documents/Developer/tg/opencv-3.0.0-beta/modules/core/src/matmul.cpp:2486:error:-215 type==v2.type&&type==icovar.type&&sz==v2.size&len==icovar.rows&&len==icovar.cols函数中的icovar.cols

我很想知道我错在哪里。提前感谢。

您在代码中混合了a和ma,b和mb。您是否尝试过马哈拉诺比斯玛、mb、icovar?

符合文档:


A和B必须是1D数组而不是矩阵

对不起,只有A和B,只是一个输入错误,大小和马氏体是用相同的矩阵计算的