opencv使用過程中的一些感受

1。第一回使用Opencv的目的是爲了能採集筆記本的視頻,想要做一個視頻聊天的軟件,大概思路是採集到的碼流轉成H.264,然後再加上轉成TS或者PS通過RTP協議或者RTP在TCP上來發送給另外一個用戶,另一個用戶收到視頻流後,反向得到碼流,然後顯示到軟件上,最終實現視頻聊天的目的。

2.最簡單的代碼如下:

首先定義一個採集的類對象

VideoCapture inputVideo(0);

下面是顯示部分,通過一個MFC的定時器,定時40ms來觸發一次,最終在界面上顯示,大概是1000/40ms=25幀,一秒25幀的數據。

void CMFCApplication1Dlg::OnBnClickedButton1()
{
    SetTimer(1, 40, NULL);
    return;
}

void CMFCApplication1Dlg::OnBnClickedButton2()
{
    KillTimer(1);
}


void CMFCApplication1Dlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO:  在此添加消息處理程序代碼和/或調用默認值
    Mat src;
    inputVideo >> src;
    if (src.empty()) return;
    imshow("view", src);
    CDialogEx::OnTimer(nIDEvent);
}
最終就能出來視頻了。大概界面效果如下:(比較宅,不曬本人照片了)


在學習調用opencv的過程中瞭解到下面的東西:

opencv是個圖像處理庫,它封裝了大量圖像處理算法,與視頻採集沒有關係,但這個庫的使用者爲了方便,把VFW(Video for windows)也集成到了opencv,已達到視頻採集和圖像處理的封裝到一起的目的;

而DirectShow是微軟公司在VFW的基礎上推出了新一代基於COM的流媒體處理的開發包,在視頻開發中,不論從效率還是實用性上都好於VFW。

編碼,解碼 把圖像編製成視頻流,或把視頻流解碼成圖像的算法,H.264只是其中的一種,比較常用的編碼器還有VCD,DVD,MEEG4,不過爲了在網上傳輸,H.264算法基本已成爲一種趨勢了,它主要特點是編碼後視頻文件小而清晰;使用264通常可以使用現成封裝好的庫,同264庫,也有好多種,有免費的,有收費的,也可以自己寫,不過好像很難,沒必要。

發送端:

directshow--》從攝像頭採集圖像--》發送h。264編碼器壓制成視頻文件--》網絡傳輸--》接收端

接收端:

directshow-》從網絡採集圖像--》通過H。264編碼器在本地播放視頻或保存視頻。

directshow是由大量的fileter構成的,如果只是採集,通現成的fileter即可。


opencv簡介:

Opencv(Open Source Computer Vision Library)是一個基於(開源)發行的跨平臺計算機視覺庫,可以運行在Linux,Windows,android,ios等操作系統上,它輕量級而且高效--由一系列C語言和少量C++類構成,同時提供了Python,Ruby,MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的諸多通用算法。

【calib3d】--Calibration和3D,相機校準和三維重建相關

【contrib】--新增人臉識別,立體匹配,人工視網膜模型等技術

【core】--核心功能模塊,包含Opencv基本數據結構和繪圖函數等

【imgproc】--Image/Process,包含濾波,幾何變換,直方圖相關,特徵檢測,運動分析和形狀描述等

【features2d】--2D功能框架,主要包含特徵檢測和描述及接口

【Flann】--高維的近似金鄰快速搜索算法庫

【gpu】--運用GPU加速的計算機視覺模塊

【highgui】--高層圖形用戶界面,包含媒體輸入輸出,視頻捕獲,圖像和視頻的編碼和解碼,圖形交互界面接口等

【legacy】--包含運動分析,平面細分,描述符提取等

【ml】--Machine learning,機器學習模塊

【objdetect】--目標檢測模塊

【photo】--包含圖像修復和圖像去噪兩部分

【。。。。】


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章