比较2 cv :: Mat

时间:2014-09-04 07:51:03

标签: c++ opencv

我有2个cv :: Mat数组(大小相同),当我想比较它们(如果相同)时,我使用了cv :: compare

cv::compare(mat1,mat2,dst,cv::CMP_EQ);

是否有任何函数返回true / false?

3 个答案:

答案 0 :(得分:8)

如果你需要按尺寸比较2 cv :: Mat,那么你可以检查

if(mat1.size() == mat2.size())
    //do stuff
else
    //do other stuff

如果您需要检查2 cv :: Mat是否相等,您可以执行 AND XOR 运算符并检查结果是否为cv :: Mat full零:

cv::bitwise_xor(mat1, mat2, dst);        
if(cv::countNonZero(dst) > 0) //check non-0 pixels
   //do stuff in case cv::Mat are not the same
else
  //do stuff in case they are equal

答案 1 :(得分:4)

  

如果你需要检查2 cv :: Mat是否相等,你可以执行AND运算符并检查结果是否是一个充满零的cv :: Mat:

AND运算符不适合此任务。如果矩阵全为0,则无论其他矩阵是否全为0,它都将始终返回true。

在这种情况下必须使用XOR。

这里是blackibiza代码的修改版本:

cv::bitwise_xor(mat1, mat2, dst);        
if(cv::countNonZero(dst) > 0) //check non-0 pixels
   //do stuff in case cv::Mat are not the same
else
  //do stuff in case they are equal

答案 2 :(得分:0)

此函数根据相似性(未经测试)返回true / false

bool MyCompare(Mat img1, Mat img2)
{
    int threshold = (double)(img1.rows * img1.cols) * 0.7; 

    cv::compare(img1 , img2  , result , cv::CMP_EQ );
    int similarPixels  = countNonZero(result);

    if ( similarPixels  > threshold ) {
        return true;
    }
    return false;
}