0

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

首先,我尝试发送原始 RGB 数据(752*480*3 - 大约 1MB),但最后我在基于 RGB 图像的 javascript 中将图像编码为 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(3 个通道在哪里bgrImage- IplImage*BGR)后,我只需要遍历data我的成员CvMat即可获取所有 png 编码数据?

4

1 回答 1

1

cvEncodeImage函数将要编码的图像的扩展名作为其第一个参数。你正在路过0,这与NULL. 这就是您收到消息的原因NULL not valid

你可能应该使用这个:

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

您可以查看cvEncodeImage 此处的文档。

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

于 2013-08-03T18:14:05.060 回答