2014-12-23 1 views
-1

문제가 포인터와 관련되어 있음을 알고 있습니다. 오류를 찾는데 도와주세요.mith test.exe의 0x013e1e61에서 첫 번째 예외가 발생했습니다. 0xC0000005 : 액세스 위반 읽기 위치가 0x00000028입니다.

  IplImage* ExtractBlue(IplImage* in) 
    { 
     int width = in->width; 
     int height = in->height; 
     IplImage *out = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3); 
      uchar *datain; 
      datain = (uchar *)in->imageData; 
      uchar *dataout; 
      dataout = (uchar *)out->imageData; 

      int i,j,k; 
      for(i=0;i<out->height;i++) 
       for(j=0;j<out->width;j++) 
         for(k=0;k<1;k++) 
         { 

          dataout[i*out->widthStep+j*out->nChannels+k]=datain[i*in->widthStep+j*in->nChannels+k]; 
          dataout[i*out->widthStep+j*out->nChannels+(k+1)]=0; 
          dataout[i*out->widthStep+j*out->nChannels+(k+2)]=0; 
         } 

      return out; 


    } 
+1

디버거를 사용하여 정확하게 표시하시기 바랍니다 어느 선을 예외로하고 있습니까? –

답변

0

"문제는 포인터 사용과 관련이 있습니다."- 예. 그래서 당신이하고있는 끔찍한 수술을 피해야합니다.

모든 IplImages를 삭제하고 C++ API를 사용하십시오! 당신은 이미지의 파랑 채널을 유지하고 0으로 무엇을 설정하려면

, 그것은 너무 쉽게 :

Mat in = imread(...); 
Mat out = in.mul(Scalar(1,0,0)); 

enter image description here

enter image description here

관련 문제