我尝试使用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数据做,现在我遇到了上面提到的问题。
答案 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()
彩色通道计数。