iplimge转ARUint8出现有关问题
iplimge转ARUint8出现问题
我想把一个iplimge类型的图像数据转换成ARUint8的,采用下面的程序进行运算,但是显示的图片不对,我不会插入图片,但是显示之后的图片描述大概如下,只显示原来图片的4分之一,然后这四分之一重复出现像波纹一样,并且整个显示出来的图片上面像有雪花一样的,向各位请教一下是什么问题,该如何解决。
[code=C/C++][/code]
///////////////IplImage与ARUint8格式转换
memcpy(dataPtr,pFrame->imageData,pFrame->imageSize);
//test picture 用于对比分析,看图像格式转换是否正确
memcpy(opencvImage->imageData, dataPtr, opencvImage->imageSize);//error
for(int m=0; m < opencvImage->height; m++){
for(int n=0; n < opencvImage->width; n++) {
rgbTmp[0] = opencvImage->imageData[opencvImage->widthStep * m + n*4]; // B
rgbTmp[1] = opencvImage->imageData[opencvImage->widthStep * m + n*4 + 1]; // G
rgbTmp[2] = opencvImage->imageData[opencvImage->widthStep * m + n*4 + 2]; // R
cvimg->imageData[cvimg->widthStep * m + n*3] = rgbTmp[0];
cvimg->imageData[cvimg->widthStep * m + n*3 + 1] = rgbTmp[1];
cvimg->imageData[cvimg->widthStep * m + n*3 + 2] = rgbTmp[2];
}
}
cvShowImage("video", pFrame);
cvShowImage("foreground", opencvImage);
cvShowImage("background", cvimg);
------解决方案--------------------
虽然不知道ARUint8是什么,但是你的这句
[code=C/C++][/code]rgbTmp[0] = opencvImage->imageData[opencvImage->widthStep * m + n*4]; // B
rgbTmp[1] = opencvImage->imageData[opencvImage->widthStep * m + n*4 + 1]; // G
rgbTmp[2] = opencvImage->imageData[opencvImage->widthStep * m + n*4 + 2]; // R
就不对吧,如果不是4通道的图像的话。
如果说是出现你说的条纹,很可能是取像素错位的原因
我想把一个iplimge类型的图像数据转换成ARUint8的,采用下面的程序进行运算,但是显示的图片不对,我不会插入图片,但是显示之后的图片描述大概如下,只显示原来图片的4分之一,然后这四分之一重复出现像波纹一样,并且整个显示出来的图片上面像有雪花一样的,向各位请教一下是什么问题,该如何解决。
[code=C/C++][/code]
///////////////IplImage与ARUint8格式转换
memcpy(dataPtr,pFrame->imageData,pFrame->imageSize);
//test picture 用于对比分析,看图像格式转换是否正确
memcpy(opencvImage->imageData, dataPtr, opencvImage->imageSize);//error
for(int m=0; m < opencvImage->height; m++){
for(int n=0; n < opencvImage->width; n++) {
rgbTmp[0] = opencvImage->imageData[opencvImage->widthStep * m + n*4]; // B
rgbTmp[1] = opencvImage->imageData[opencvImage->widthStep * m + n*4 + 1]; // G
rgbTmp[2] = opencvImage->imageData[opencvImage->widthStep * m + n*4 + 2]; // R
cvimg->imageData[cvimg->widthStep * m + n*3] = rgbTmp[0];
cvimg->imageData[cvimg->widthStep * m + n*3 + 1] = rgbTmp[1];
cvimg->imageData[cvimg->widthStep * m + n*3 + 2] = rgbTmp[2];
}
}
cvShowImage("video", pFrame);
cvShowImage("foreground", opencvImage);
cvShowImage("background", cvimg);
------解决方案--------------------
虽然不知道ARUint8是什么,但是你的这句
[code=C/C++][/code]rgbTmp[0] = opencvImage->imageData[opencvImage->widthStep * m + n*4]; // B
rgbTmp[1] = opencvImage->imageData[opencvImage->widthStep * m + n*4 + 1]; // G
rgbTmp[2] = opencvImage->imageData[opencvImage->widthStep * m + n*4 + 2]; // R
就不对吧,如果不是4通道的图像的话。
如果说是出现你说的条纹,很可能是取像素错位的原因