OpenCV Mahalanobis用于计算两个图像之间的距离

时间:2015-04-10 03:37:52

标签: 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_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);

矩阵的类型相同,并具有以下值:

type a:5
type b:5
icovar type:5
a cols:1280
a rows:400
b cols:1280
b rows:400
icovar cols:1280
icovar rows:1280

马哈拉诺比斯距离函数抛出如下错误:

  

OpenCV错误:断言失败(类型== v2.type()&amp;&amp; type == icovar.type()&amp;&amp; sz == v2.size()&amp;&amp; len == icovar。 Mahalanobis中的rows&amp;&amp; len == icovar.cols),文件/Users/felipefujioka/Documents/Developer/tg/opencv-3.0.0-beta/modules/core/src/matmul.cpp,第2486行   libc ++ abi.dylib:以类型cv的未捕获异常终止::异常:/Users/felipefujioka/Documents/Developer/tg/opencv-3.0.0-beta/modules/core/src/matmul.cpp:2486:错误:( - 215)type == v2.type()&amp;&amp; type == icovar.type()&amp;&amp; sz == v2.size()&amp;&amp; len == icovar.rows&amp;&amp; len == icovar.cols in mahalanobis

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

2 个答案:

答案 0 :(得分:0)

您在代码中将amabmb混合在一起。你试过Mahalanobis(ma, mb, icovar)吗?

答案 1 :(得分:0)