Compare 2 cv::Mat

Compare 2 cv::Mat

本文关键字:Mat cv Compare      更新时间:2023-10-16

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

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

是否有返回true/false的函数?

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

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

如果需要检查2个cv::Mat是否相等,可以执行

ANDXOR运算符,并检查结果是否为满零的cv::Mat:
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个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

此函数根据相似性(未测试)返回真/假

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;
}