我知道问题与使用的指针有关。请帮我找出错误。
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;
}
答案 0 :(得分:0)
“我知道问题与使用的指针有关” - 是的。这就是为什么你应该避免你正在做的那些可怕的行动。
请取消所有IplImages,并使用c ++ api!
如果你想保留图像的蓝色通道,并将其他任何东西设置为0,那就太容易了:
Mat in = imread(...);
Mat out = in.mul(Scalar(1,0,0));