999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OpenCV的試飛視頻數據回放技術

2018-11-22 11:58:54劉升護
計算機技術與發展 2018年11期

郝 朝,山 壽,劉升護

(中國飛行試驗研究院,陜西 西安 710089)

0 引 言

在飛行試驗中,視頻數據能夠全面、直觀、時效、客觀地反映人機交互動作,是試飛工程師給出航空武器裝備鑒定/定型試飛結論的重要依據[1]。目前機載記錄視頻數據格式為TS流,文件后綴名為*.m2t,采用現有的視頻播放軟件像暴風影音等即可進行播放。機載視頻影像數據自身是沒有時間的,時標疊加在每一幀視頻畫面的左上角,無法直接進行獲取。課題人員通常關心的關鍵數據段較短,在對機載記錄的視頻數據進行回放時,為了查找關鍵時刻的視頻數據,采用現有播放軟件進行播放時通過拖動進度條進行查找無法實現精確絕對時間快速定位,數據回放效率較低。

基于以上分析,提出了一種基于OpenCV的機載視頻圖像時間識別方案,采用OpenCV技術對每幀圖像中的時間進行識別,在每幀數據前面打上對應的時間戳,通過時間跳轉進行視頻圖像快速定位。

1 OpenCV簡介

OpenCV[2-3](open source computer vision library)是一個開源的計算機視覺庫。OpenCV由一系列C語言函數和少量C++類構成,還為Matlab等其他語言提供相應的接口[4-5],在圖像處理和計算機視覺等方面實現了很多通用算法,對圖像處理和視頻技術的二次開發大有裨益。OpenCV主體可分為5個模塊[6],其中4個模塊如圖1所示。另一個模塊CvAux包括一些過時以及新出現的算法和函數。

圖1 OpenCV的基本結構

OpenCV的圖像和矩陣運算能力極為強大,使得開發效率和程序運行的可靠性得到顯著提高。OpenCV是一個包括300多個C/C++函數的跨平臺的中高層API,既可獨立運行,也可使用其他庫。Windows和Linux兩種平臺可供開發者選擇。

2 總體流程

在飛行試驗視頻數據回放中,需要截取當前視頻流圖像并保存為BMP文件以便進行后續圖像處理,包括圖像預處理、特征提取和判決等處理流程,如圖2所示。

圖2 圖像識別處理流程

獲取圖像信息,就是從試飛視頻流中截取當前圖像,用紅、綠、藍三基色的8位亮度值(RGB值)[7]表示圖像,RGB值的范圍為0~255。

圖像預處理[8],就是采用圖像增強、濾波和變換等方式,去除相關噪聲,將原始圖像變成適用于計算機進行特征提取的形式。圖像增強就是利用數學方法提高圖像中人們所關注部分的清晰度,削弱無用信息,突出有用信息,包括去除噪聲、修正灰度、圖像平滑、腐蝕與銳化等。圖像變換是指使用傅里葉變換、小波變換等數學方法的性質和特點,將圖像空間轉換到頻域空間,提高運算速度并改善圖像質量。

圖像特征提取,就是對當前圖像信息進行歸納與分析,提取出能反映當前圖片本質的可用于圖像判決的特征量。

圖像判決,通過特征量與域值進行的計算分析,判斷圖像狀態,給出最終結果。

3 圖像處理

機載視頻時標只存在于視頻畫面的左上角位置,因此為了提高圖像識別的速度,只需對一幀圖像的左上角部分區域進行處理。對圖像進行處理須經過以下幾個步驟:

(1)采用高斯模糊算法對圖像進行平滑處理,減少圖像的噪聲或失真。

cvSmooth(src_img, src_img,CV_GUASSIAN,5,0);

(2)對圖像進行灰度處理[9]。

cvCvtColor(src_img,gray_img,CV_BGR2GRAY);

(3)對圖像進行直方圖均衡化處理,增強圖像的亮度及對比度。

Ipllmage *img_zf=cvCreateImage(size,IPL_DEPTH_8U,1);

cvEqualizeHist(gray_img, img_zf);

cvReleaseImage(&gray_img);

(4)對圖像進行二值化處理。

Ipllmage *img2=cvCreateImage(size,IPL_DEPTH_8U,1);

cvThreshold(img_zf,img2,50,255,CV_THRESH_BINARY_INV);

cvReleaseImage(&img_zf);

(5)細化處理。

Ipllmage *img3=cvCreateImage(size,IPL_DEPTH_8U,1);

cvZero(img3);

cvThin(img2, img3,5);

cvReleaseImage(&img2);

(6)圖像腐蝕[10],去掉圖像的邊緣毛刺。

Ipllmage *img4=cvCreateImage(size,IPL_DEPTH_8U,1);

CvErode(img3,img4,NULL,1);

cvReleaseImage(&img3);

(7)圖像膨脹[11-12],擴大圖像邊緣,使圖像表面更平滑。

lplConvKernel *iplele=cvCreateStruringElementEx(3,3,0,0,CV_SHAPE_RECT);

cvDilate(img4,img4,iplele,1);

cvReleaseStructuringElement(&iplele);

(8)查找輪廓,進行數字分割。

Ipllmage *img5=cvCreateImage(size,IPL_DEPTH_8U,1);

cvCopy(img4,img5);

CvSeq *contour=NULL;

CvMemStorage *storage=cvCreateMemStorage(0);

cvFindContours(img5,storage,&contour,sizeof(CvContour),CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);

cvReleaseImage(&img5);

4 圖像識別

圖像匹配技術[13]是指根據已知圖像模式(基準模板)從實時圖像中搜索相同或相似圖像模式的過程。圖像匹配就是要根據參考圖像和實時圖像來選定某些特征、相似性準則及搜索策略進行相關運算,以確定匹配的最佳空間對應點,得到不同圖像之間的相似度。

常用的圖像匹配方法有基于線形形狀的匹配、模板匹配[14-15]、利用射影空間的匹配等。在試飛視頻數據中,機載記錄的視頻數據在硬件正常的情況下是不存在干擾與噪聲的,因此采用基于模板匹配的OCR算法[16]來對試飛圖像進行識別是一種有效方法。模板就是數字0到數字9的字符圖像,而模板匹配就是在一幅大圖像中搜尋目標,該目標與模板有同樣的方向、尺寸和圖像元素,通過一定的算法在圖中找到目標圖像。將數字0到數字9以圖片的形式保存到字符數據庫中作為模板進行對象匹配。首先將待識別數字字符進行二值化處理,然后將其從尺寸進行縮放,與字符數據庫中的模板大小保持一致,與數據庫中的模板依次進行匹配分析,給出最佳識別結果。該算法識別率高,實現較簡單,也有一定程度的抗干擾能力。通過OpenCV的matchTemplate函數進行模板匹配后,可以得到一個映射圖,這張圖中最大值的地方便是匹配度最大的子圖的左上角坐標,可以使用minMaxLoc函數獲得子圖位置和相應分數,再進行后續操作。

5 應用效果

機載記錄數據格式為標準的TS流文件,視頻解碼與顯示采用開源的FFmpeg與SDL庫實現。FFmpeg是一個開源且跨平臺的音視頻流方案,是自由軟件中最完備的一套多媒體支持庫,為音視頻轉換、解碼以及流化提供了完整的解決方案。音視頻編解碼庫為libavcodec,相關數據結構包括AVFormatContext、AVCodecContext、AVCodec、AVPacket、AVFrame與AVPicture等。調用FFmpeg解碼視頻流的流程為:

(1)avcodec_register_all()。首先初始化FFmpeg以及注冊解碼器,在后面的過程中,將使用已注冊的解碼器對視頻流進行解碼。

(2)avcodec_open2()。打開指定格式(H.264或MPEG4)的解碼器。

(3)avcodec_decode_video2()。使用相應的解碼器對獲取到的每幀視頻數據進行解碼。

依次讀取一幀視頻數據調用(3)即可對視頻流進行解碼,并獲得解碼后的YUV數據,對YUV數據進行數據格式轉換和處理,用于視頻顯示。

SDL(simple directmedia layer)是一套基于C語言的跨平臺多媒體開發庫,提供了多種控制音視頻輸入與輸出的函數。SDL顯示YUV數據流程如下:

(1)SDL_Init()。初始化SDL。

(2)SDL_CreateWindow()。創建SDL顯示窗口用于視頻播放。

(3)SDL_CreateRender()?;诖翱趧摻ㄤ秩酒?,用于渲染SDL_Texture至SDL_Window。

(4)SDL_CreateTexture()。創建紋理用于顯示YUV數據,一個SDL_Texture對應一幀YUV數據。

(5)SDL_UpdateTexture()。設置紋理的像素數據。

(6)SDL_RenderCopy()。將紋理數據復制給渲染目標。

(7)SDL_RenderPresent()。顯示畫面。

采用FFmpeg將一幀視頻圖像解碼為YUV數據,然后調用(5)~(7)即可實現SDL播放與顯示。

考慮到播放視頻時要對視頻進行拖動進度條、暫停等操作,為了充分利用系統資源,采用多線程并發技術,以用戶UI界面操作為主線程,視頻解碼與顯示為子線程,同時視頻顯示子線程接收主線程消息進行視頻畫面的暫停、截圖等操作。通過消息機制傳遞參數實現多線程間通信。當主線程對視頻線程進行操作的時候,視頻顯示線程進入等待狀態,直到消息響應喚醒該線程。使用SDL封裝的SDL_thread 來進行線程管理。創建顯示線程使用SDL_CreateThread,操作視頻畫面時使用SDL_WaitThread實現線程間通信等待,退出使用SDL_KillThread來關閉視頻顯示線程。

實際應用效果如圖3所示。首先采用圖像處理與識別技術對機載視頻每幀圖像進行預處理,對時間進行識別,然后在每幀視頻數據前打上對應的時間戳。在進行視頻數據回放時只需要輸入關鍵動作段時刻即可快速定位至該幀圖像。應用效果表明,利用OpenCV能夠準確識別當前圖像的時間,通過時間跳轉功能可迅速定位至指定時間的圖像。

圖3 實際應用效果

6 結束語

為了解決機載視頻關鍵圖像快速定位的問題,設計了基于OpenCV的試飛視頻數據快速回放軟件。采用基于OpenCV的圖像識別技術對機載視頻進行預處理,識別每幀處理后圖像中的時間,然后在每幀視頻數據前打上相應的時間戳,在進行回放時通過時間對比實現圖像快速定位。該技術已經應用于多個型號的飛行試驗視頻數據回放中,可以通過指定時間快速跳轉到該幀畫面,正確性和可靠性得到驗證,有效提高了視頻數據回放效率,為保障型號試飛的高效順利進行發揮重要作用。

主站蜘蛛池模板: 成年人视频一区二区| 亚洲国产AV无码综合原创| 精品国产一区二区三区在线观看 | 视频二区国产精品职场同事| 日韩欧美视频第一区在线观看| 国产成人无码综合亚洲日韩不卡| 午夜天堂视频| 高清色本在线www| 特级aaaaaaaaa毛片免费视频 | 欧美午夜视频在线| 在线国产你懂的| 最新日韩AV网址在线观看| 亚洲最猛黑人xxxx黑人猛交| 欧美一区二区自偷自拍视频| 天堂网亚洲综合在线| 看你懂的巨臀中文字幕一区二区| 欧美福利在线播放| 亚洲国产精品不卡在线| 一级全免费视频播放| 国产精品成人啪精品视频| 亚洲av无码久久无遮挡| 久久狠狠色噜噜狠狠狠狠97视色 | 国产chinese男男gay视频网| 欧美视频免费一区二区三区 | 成人无码区免费视频网站蜜臀 | 久久精品国产亚洲麻豆| 伊人中文网| 久久性视频| 精品国产一区二区三区在线观看 | aⅴ免费在线观看| 91色在线视频| 国产91丝袜在线观看| 伊人网址在线| 精品国产亚洲人成在线| 麻豆精品久久久久久久99蜜桃| 91成人在线免费视频| 国产高清在线观看91精品| 18禁黄无遮挡网站| 国产浮力第一页永久地址| 99精品在线看| 国产精品私拍99pans大尺度| 国产一区亚洲一区| 操操操综合网| a在线亚洲男人的天堂试看| 最新国产在线| 综合成人国产| 日韩精品久久久久久久电影蜜臀| 9cao视频精品| 国产噜噜噜视频在线观看 | a毛片基地免费大全| 国产黑人在线| 99视频只有精品| 99视频精品全国免费品| 就去色综合| 高清无码手机在线观看| 91探花国产综合在线精品| 91 九色视频丝袜| 2021亚洲精品不卡a| 成人国产一区二区三区| 婷婷激情亚洲| 国产精品亚洲五月天高清| 国产成人调教在线视频| 色综合天天综合中文网| 青青草久久伊人| 国产成人精品第一区二区| 免费观看亚洲人成网站| 久久公开视频| 亚洲天堂网在线观看视频| 国产不卡在线看| 精品视频福利| 免费一看一级毛片| 直接黄91麻豆网站| 日韩在线网址| 乱色熟女综合一区二区| 国产精品自在线天天看片| 亚洲无码精品在线播放| 成人免费一级片| 性做久久久久久久免费看| 国产麻豆精品在线观看| 久久国产免费观看| 狂欢视频在线观看不卡| 国产美女精品人人做人人爽|