您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何解析RTSP協議視頻平臺EasyCVR使用OpenCV 從內存中構建Mat數據,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
在 EasyCVR 圖片處理功能中,采用了 OpenCV 進行了圖片處理。OpenCV 是一個基于 BSD 許可(開源)發行的跨平臺計算機視覺和機器學習軟件庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。
在使用 OpenCV 上,一般直接使用cv::imread(file_path.c_str());方法構建 cv::Mat 數據進行處理。此種方法是從磁盤中的文件中讀取數據后構建 cv::Mat,即處理順序為:
首先其他模塊將圖片數據寫入到磁盤文件中;
OpenCV 將磁盤文件加載到內存中構建 Mat 數據。
此種方法缺點如下,首先在磁盤的讀寫上消耗了性能,其次其他模塊消耗了一次內存,OpenCV 模塊也消耗了一次內存。
因為其他模塊已經將對應的圖片數據加載在內存中,因此直接將此部分數據傳遞給 OpenCV 模塊,就可極大的加快處理速度。主要使用cv::imdecode(data, CV_LOAD_IMAGE_COLOR)方法構建 Mat 數據。
以下為具體代碼:
string fname = "D:/image.jpg"; //! 以二進制流方式讀取圖片到內存 FILE* pFile = fopen(fname.c_str(), "rb"); fseek(pFile, 0, SEEK_END); long lSize = ftell(pFile); rewind(pFile); char* pData = new char[lSize]; fread(pData, sizeof(char), lSize, pFile); fclose(pFile); //! 解碼內存數據,變成cv::Mat數據 cv::Mat img_decode; vector<uchar> data; for (int i = 0; i < lSize; ++i){ data.push_back(pData[i]); } img_decode = cv::imdecode(data, CV_LOAD_IMAGE_COLOR); cv::flip(img_decode, img_decode, -1); img_decode.channels(); //! 將cv::Mat數據編碼成數據流 vector<unsigned char> img_encode; cv::imencode(".jpg", img_decode, img_encode); unsigned char *encode_data = new unsigned char[lSize]; for (int i = 0; i<lSize; i++){ encode_data[i] = img_encode[i]; }
首先從文件中讀取數據,并加載到內存中。此部分和 OpenCV 完全無關,可以由其他模塊進行設計。data 為存儲內存的數據。最終直接調用 cv::imdecode 就構建成功。
EasyCVR視頻解決方案分為設備端、服務端、客戶端三個部分,設備端位于局域網,服務端及客戶端位于互聯網,支持傳統網絡攝像機、NVR、編碼器、SDK等設備,最大程度的提高了硬件設備的兼容性。
以上就是如何解析RTSP協議視頻平臺EasyCVR使用OpenCV 從內存中構建Mat數據,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。