2017-03-29 20 views
0

グレースケールイメージの白いピクセル数を計算する小さなプログラムを作った。同じプログラムで画像を2回開いた場合、私は別の結果が得られます。画素の輝度を表示する場合と同じですが、同じ画像であっても変化します。誰かが問題をどこに見たら助けてください。プログラム内で同じイメージに対して異なる結果が出る

#include "opencv2/imgcodecs.hpp" 
#include "opencv2/highgui.hpp" 
#include "opencv2/imgproc.hpp" 
#include <iostream> 

using namespace std; 
using namespace cv; 
int main() 
{ int i=0,j,nbr=0,nbr1=0; 


Mat image=imread("2_.png",CV_LOAD_IMAGE_GRAYSCALE); 
Mat image2=imread("2_.png",CV_LOAD_IMAGE_GRAYSCALE); 

for(i=0;i<image.rows;i++) 
{ 
    for(j=0;j<image.cols;j++) 
    {if (image.at<int>(i,j)!=0) 
      nbr++; 
    if (image2.at<int>(i,j)!=0) 
      nbr1++; 
    } 
} 
printf("%d\n %d\n",nbr,nbr1); 


    return 0;} 

ありがとうございました。

答えて

3

intは使用しないでください。グレースケール画像にはucharを使用する必要がある可能性があります。 intを使用すると、イメージメモリが不足します。

+1

これは理にかなっています。なぜなら、毎回intを読み込むと、最終的にバッファオーバーオーバーが発生するからです。バッファを越えて、データは完全にガーベッジです。 –

+0

グレートポイント!! ... –

+0

@JeruLukeあなたが編集して以来、英語は間違っています。今度は、 'int'が間違っているのではなくオプションであるように読んでいます。 – Galik

関連する問題