2013-08-03 147 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