如果我拍摄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)。
不应该一样吗?为什么会这样?我误解了什么吗?
答案 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]);
}
}