mith test.exe中0x013e1e61处的第一次机会异常:0xC0000005:访问冲突读取位置0x00000028

时间:2014-12-23 11:02:11

标签: opencv visual-c++

我知道问题与使用的指针有关。请帮我找出错误。

         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 :(得分:0)

“我知道问题与使用的指针有关” - 是的。这就是为什么你应该避免你正在做的那些可怕的行动。

请取消所有IplImages,并使用c ++ api!

如果你想保留图像的蓝色通道,并将其他任何东西设置为0,那就太容易了:

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

enter image description here

enter image description here