2013-08-03 151 views
0

由于我的项目,我想送的WebSockets使用从嵌入机图像的流客户端应用程序,并在img标签显示他们能够实现流媒体的一部分。opencv的 - 创建PNG图像

首先,我试图发送原始RGB数据(752 * 480 * 3 - 大约1MB),但最终我得到了一些编码图像到基于RGB图像的JavaScript中的问题,所以我想尝试编码我的数据首先发送到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)我只需要通过我的CvMatdata成员进行迭代来获得所有的PNG编码数据的?

回答

1

cvEncodeImage功能作为它的第一个参数要编码图像的延伸。你逝去的0,这是同样的事情NULL。这就是为什么你收到信息NULL not valid

你应该使用这样的:

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

您可以检查出的cvEncodeImagehere的文档。

你可以看看cvEncodeImage或其C++兄弟imencode这里的一些例子:encode_decode_test.cpp。他们还表现出你愿意,你可以传递给cvEncodeImage的情况下,一些参数进行调整。

+0

对我而言非常愚蠢的错误,感谢注意到它。 – Andna