ImageMagick 从内存数据创建 Image

ImageMagick接口有

Image::read(const string& filename);
以及

Blob my_blob; // create a blob
Image my_image("my_image.gif"); // create an image form a GIF image file
my_image.magick("JPEG"); // set JPEG output format
my_image.write(&my_blob); // encode 'my_image' in JPEG format,
// and store the encoded image in my_blob
Image image_from_blob(my_blob); // create an image from the JPEG blob
// (use the Blob-based Image constructor)
image_from_blob.magick("BMP"); // set the image format to bitmap
image_from_blob.write("image_from_blob.bmp"); // save the image on disk in BMP format

但是如果有内存数据 byte[] 存储 如 RGB,则无法通过上述接口进行转换,

以OPencv为例,

opencv TO image

Image Ipl2Magick(IplImage* iplImage)
{
   Image mgk(iplImage->width, iplImage->height, "BGR", CharPixel, (char *)iplImage->imageData);
   return mgk;
}

image TO opencv

void Magick2Ipl(Image magicImage, IplImage* cvImage)
{
   int width= magicImage.size().width();
   int height = magicImage.size().height();

   byte* blob= new byte[cvImage->imageSize];
   magicImage.write(0,0, width, height, "BGRA", MagickCore::CharPixel, blob);
   memcpy(cvImage->imageData, blob, cvImage->imageSize);
   delete [] blob;
}

切记,4通道~

IplImage* cvimg =  cvCreateImage(cvSize(...,...), IPL_DEPTH_8U, 4);

REFERENCE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值