C++ 比较2个cv::Mat

C++ 比较2个cv::Mat,c++,opencv,C++,Opencv,我有两个cv::Mat数组(大小相同),当我想要比较它们时(如果相同),我使用了cv::compare cv::compare(mat1,mat2,dst,cv::CMP_EQ); 是否有返回真/假的函数?此函数基于相似性返回真/假(未测试) 如果需要按大小比较2个cv::Mat,则可以检查 if(mat1.size() == mat2.size()) //do stuff else //do other stuff 如果需要检查2个cv::Mat是否相等,可以执行ANDXO

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

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

是否有返回真/假的函数?

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


如果需要按大小比较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,其中包含零:

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

你会得到一整张满是真/假的垫子;)我只想得到真/假作为返回值。“我想比较它们”-这可能是你问题的弱点。你在寻找相似之处吗?像素级身份?两幅图像中显示的对象相同吗?所有这些都需要不同的措施。我的错误。我想比较它们是否相同。在这里,您可以根据阈值对它们进行比较。如果您想了解它们是否完全相等,则必须比较单个位或将阈值设置为零。不确定哪一个更快,但
dst=mat1-mat2
后跟countNonZero也可以这样做(结果倒置)。位运算符的执行速度比差快一点,这就是为什么我建议使用bitwose_,并查看J.Roy的答案:应该使用按位_xor,而不是按位_,@sircolinton我已经纠正了这一点,Thanksdsst=mat1-mat2返回一个钳制值范围,因此,mat2中大于mat 1中相应像素的任何像素都返回0。所以只有dst=(mat1-mat2)+(mat2-mat1)可以工作,现在很明显,按位必须更快!