2017-03-29 3 views
0

그레이 스케일 이미지의 흰색 픽셀 수를 계산하는 작은 프로그램을 만들었습니다. 같은 프로그램에서 이미지를 두 번 열면 결과가 달라집니다. 픽셀의 강도를 표시하는 경우와 동일하지만 동일한 이미지 일지라도 변경됩니다. 문제가있는 곳을 누군가가 보는 경우 도움을 받으십시오.프로그램에서 동일한 이미지에 대해 다른 결과가 나타납니다.

#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

관련 문제