我有2个cv :: Mat数组(大小相同),当我想比较它们(如果相同)时,我使用了cv :: compare
cv::compare(mat1,mat2,dst,cv::CMP_EQ);
是否有任何函数返回true / false?
答案 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;
}