compare / countNonZero返回更大的值然后预期

时间:2016-03-19 16:31:27

标签: c++ opencv

如果我拍摄2个二进制图像(像素值为0或255)并将它们与compare / countNonZero进行比较,然后使用两个嵌套循环,则不会得到相同的“得分”。

首先我使用此代码:

compare(mat1, mat2, mat_tmp, CMP_EQ);

score = countNonZero(mat_tmp);

然后这个:

for (int x = 0; x < mat1.cols; ++x)
{
    for (int y = 0; y < mat2.rows; ++y)
    {
        Scalar s1 = mat1.at<uchar>(y,x);
        Scalar s2 = mat2.at<uchar>(y,x);
        score += (s1.val[0]/255)*(s2.val[0]/255);
    }
}

和得分值​​有显着差异(例如,比较/ countNonZero得分= 206 814,嵌套回路为1022)。

不应该一样吗?为什么会这样?我误解了什么吗?

1 个答案:

答案 0 :(得分:1)

您的代码不计算矩阵像素为0而比较/ countNonZero的代码。

要通过for循环获得相同的效果,请尝试以下方法:

score = 0;
for (int x = 0; x < mat1.cols; ++x)
{
    for (int y = 0; y < mat2.rows; ++y)
    {
        Scalar s1 = mat1.at<uchar>(y,x);
        Scalar s2 = mat2.at<uchar>(y,x);
        score += (s1.val[0] == s2.val[0]);
    }
}