2016-03-19 69 views
0

如果我採取2個二進制圖像(像素值0或255)並比較他們與比較/ countNonZero,然後與兩個嵌套循環,我不會得到相同的「分數」。比較/ 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而compare/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]); 
    } 
} 
+0

你能告訴我一兩件事,請:是不是可以不計0與比較/ countNonZero(所以我得到相同的分數與嵌套循環,但使用比較/ countNonZero)? (目前我看不到它) – carobnodrvo

+0

回答我自己的評論:[multiply](http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#void%20multiply%28InputArray% 20src1,%20InputArray%20src2,%20OutputArray%20dst,%20double%20scale,%20int%20dtype%29) – carobnodrvo