2016-03-19 29 views
0

2 ikili görüntü (piksel değerleri 0 veya 255) alır ve bunları karşılaştırın/sayınNonZero ile karşılaştırırsam ve iki iç içe döngü ile aynı "puanı" alamıyorum. Sonrakarşılaştır/countNonZero daha büyük bir değer daha sonra beklenen

compare(mat1, mat2, mat_tmp, CMP_EQ); 

score = countNonZero(mat_tmp); 

ve bu:

Bu nedenle ilk önce bu kodu kullanın

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); 
    } 
} 

ve örneğin countNonZero puanı = 206 814 ve için iç içe döngüler 1022/karşılaştırma (değerler önemli ölçüde farklıdır skor).

Aynısı olmamalıdır? Neden böyle? Bir şeyi yanlış anlamış mıyım?

cevap

1

Kodunuz,/countNonZero'yu karşılaştırırken matris piksellerinin 0 olduğu alanları hesaba katmaz.

döngü aracılığıyla aynı etkiyi elde etmek için, bu deneyin:

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

Eğer bir şey daha lütfen söyler misiniz: o/countNonZero karşılaştırmak ile 0 saymak değil mümkündür (yani birlikte aynı puanı almak yuvalanmış döngüler ama karşılaştırma/countNonZero kullanarak? (Şu anda göremiyorum) – carobnodrvo

+0

Kendi yorumumu yanıtlamak için: [çarp] (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

İlgili konular