如何使用png数据构建的blob初始化Magick :: Image obj(png由cv :: imencode创建)

时间:2017-05-10 08:40:22

标签: c++ opencv imagemagick

我尝试使用png数据构建的blob创建一个Magick :: Image obj(png由cv :: imencode创建)。当我创建一个由jpg数据构建的blob的Magick :: Image obj(jpg是由cv :: imencode创建)时它工作正常,但我不能用png数据来做。

我想将一些imgs转换为gif。源数据是由cv :: imencode编码的img rawdatas。我可以使用jpg数据,但它太慢,所以我尝试用png数据做,现在我遇到了上面提到的问题。

相关问题:ImageMagick convert jpg images to gif slow

1 个答案:

答案 0 :(得分:2)

不要将cv::Mat编码到任何图像格式blob,只能传递给Magick::Image进行解码。只需将像素数据直接传递给Magick::Image.read

cv::Mat inbound_image = cv::imread("wizard.jpg");
Magick::Image outbound_image;
outbound_image.read(inbound_image.cols,  // width
                    inbound_image.rows,  // height
                    "BGR",               // Channel order (should always be "BGR", or "BGRA")
                    Magick::CharPixel,   // CV_8U
                    inbound_image.data); // void *
outbound_image.write("wizard.gif");

请注意,您将负责检查cv::Mat.depth()的存储空间大小是否正确,以及cv::Mat.channels()彩色通道计数。