Opencv - 创建png图像

时间:2013-08-03 18:10:46

标签: opencv png

作为我项目的一部分,我想使用从嵌入式计算机到客户端应用程序的websockets发送图像流,并将它们显示在img标记中以实现流式传输。

首先我尝试发送原始RGB数据(752 * 480 * 3 - 大约1MB),但最后我遇到了一些基于我的RGB图像将图像编码到png中的问题所以我想尝试编码我的首先将数据发送到PNG,然后使用websockets发送它。

问题是,我在使用已在项目中使用的OpenCV库将数据编码为PNG时遇到了一些问题。

首先,一些代码:

websocketBrokerStructure.matrix = cvEncodeImage(0, websocketBrokerStructure.bgrImageToSend, 0);
websocketBrokerStructure.imageDataLeft = websocketBrokerStructure.matrix->rows * websocketBrokerStructure.matrix->cols *  websocketBrokerStructure.matrix->step;
websocketBrokerStructure.imageDataSent = 0;

但在执行第二行时我遇到了奇怪的错误:

terminate called after throwing an instance of 'std::logic_error'
what():  basic_string::_S_construct NULL not valid

我有点困惑,为什么我从我的代码中收到此错误。

另外我想知道我是否理解正确:在调用cvEncodeImage(其中bgrImageIplImage*有3个频道 - BGR之后)我只需要遍历data我的CvMat成员{1}}获取所有png编码数据?

1 个答案:

答案 0 :(得分:1)

cvEncodeImage函数将第一个参数作为要编码的图像的扩展名。您正在传递0,这与NULL相同。这就是您收到消息NULL not valid

的原因

你应该使用这个:

websocketBrokerStructure.matrix = cvEncodeImage(".png", websocketBrokerStructure.bgrImageToSend, 0);

您可以查看cvEncodeImage here

的文档

您可以在此处查看cvEncodeImage或其C ++兄弟imencode的一些示例:encode_decode_test.cpp。它们还会显示一些您可以传递给cvEncodeImage的参数,以防您想要调整它们。