計(jì)算機(jī)學(xué)習(xí)筆記5_第1頁
計(jì)算機(jī)學(xué)習(xí)筆記5_第2頁
計(jì)算機(jī)學(xué)習(xí)筆記5_第3頁
計(jì)算機(jī)學(xué)習(xí)筆記5_第4頁
計(jì)算機(jī)學(xué)習(xí)筆記5_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、工作文件版本號:0.1編號:2015081401最后修改日期:2015.08.14密級:D演示數(shù)據(jù)項(xiàng)目文檔智慧云聯(lián)信息技術(shù)(北京)有限公司內(nèi)部文件本周工作記錄2015.8.102015.8.14<智慧云聯(lián)信息技術(shù)(北京)有限公司>版本<V0.1>編制者王琳珂編制日期2015-08-14審核者審核日期批準(zhǔn)者批準(zhǔn)日期簽字日期2015年08月14日目 錄1. ??禂z像頭視頻自動(dòng)抓圖31.1 開啟預(yù)覽之后自動(dòng)保存每幀圖片為BMP格式41.2 不預(yù)覽情況下自動(dòng)保存圖片51.3 編寫代碼查看保存一張圖片所用時(shí)間72. WIN7系統(tǒng)下搭建LINUX虛擬機(jī)92.1 工具92.2 安裝V

2、Mware92.3 搭建LINUX虛擬機(jī)122.4 安裝后的基本設(shè)置173. 批處理刪除VS工程下的中間文件194. Ubuntu中利用gcc和gdb編譯和調(diào)試程序234.1 單個(gè)C源文件的編譯(參數(shù)-o)234.2 多個(gè)C源文件的編譯(參數(shù)-c和-o)234.3 利用gdb調(diào)試程序251. ??禂z像頭視頻自動(dòng)抓圖各個(gè)函數(shù)初始代碼:函數(shù): InitInstance(HINSTANCE, int)BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) /前面的原代碼不變,后面加入如下攝像頭初始化設(shè)置 /- hDC = GetWindowDC(hW

3、nd); / 初始化 NET_DVR_Init(); /設(shè)置連接時(shí)間與重連時(shí)間 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); / 注冊設(shè)備 NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("4", 8000, "admin", "zhylxxjs201412", &struDeviceInfo); if (lUserID <

4、0) /在窗口上輸出錯(cuò)誤提示 TextOut(hDC,200,200,_T("Login error"),11); /通過變量error查看錯(cuò)誤信息 int error=NET_DVR_GetLastError(); return FALSE; return TRUE;開啟預(yù)覽函數(shù):RealPlay()void RealPlay() /啟動(dòng)預(yù)覽并設(shè)置回調(diào)數(shù)據(jù)流 NET_DVR_PREVIEWINFO struPlayInfo = 0; struPlayInfo.hPlayWnd = hWnd; /需要SDK解碼時(shí)句柄設(shè)為有效值,僅取流不解碼時(shí)可設(shè)為空 struPlayInf

5、o.lChannel = 1; /預(yù)覽通道號 struPlayInfo.dwStreamType = 0; /0-主碼流,1-子碼流,2-碼流3,3-碼流4,以此類推 struPlayInfo.dwLinkMode = 0; /0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL); if (lRealPlayHandle < 0) TextOut(hDC, 200, 20

6、0, _T("NET_DVR_RealPlay_V40 error"),26); int i=NET_DVR_GetLastError(); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return ; 關(guān)閉預(yù)覽函數(shù):PlayEnd()void PlayEnd() /關(guān)閉預(yù)覽 NET_DVR_StopRealPlay(lRealPlayHandle); /注銷用戶 NET_DVR_Logout(lUserID); /釋放SDK資源 NET_DVR_Cleanup();1.1 開啟預(yù)覽之后自動(dòng)保存每幀圖片為BMP格式NET_DVR_

7、CapturePicture 功能:預(yù)覽時(shí),單幀數(shù)據(jù)捕獲并保存成圖片。BOOL NET_DVR_CapturePicture( LONG lRealHandle, char *sPicFileName);Parameters:lRealHandle in NET_DVR_RealPlay或NET_DVR_RealPlay_V30的返回值 sPicFileName in 保存圖象的文件路徑(包括文件名)。路徑長度和操作系統(tǒng)有關(guān),sdk不做限制,windows默認(rèn)路徑長度小于等于256字節(jié)(包括文件名在內(nèi))。 Return Values:TRUE表示成功,F(xiàn)ALSE表示失敗。獲取錯(cuò)誤碼調(diào)用NET_

8、DVR_GetLastErrorRemarks:(1)在調(diào)用該接口之前可以調(diào)用NET_DVR_SetCapturePictureMode設(shè)置抓圖模式,默認(rèn)為BMP模式。如果抓圖模式為BMP模式,抓取的是BMP圖片,保存路徑后綴應(yīng)為.bmp,例如:sPicFileName="D:test.bmp";如果抓圖模式為JPEG模式,抓取的是JPEG圖片,保存路徑后綴應(yīng)為.jpg,例如:sPicFileName="D:test.jpg"。 (2)調(diào)用NET_DVR_CapturePicture進(jìn)行抓圖,要求在調(diào)用NET_DVR_RealPlay_V40等接口時(shí)傳入

9、非空的播放句柄(播放庫解碼顯示),否則時(shí)接口會(huì)返回失敗,調(diào)用次序錯(cuò)誤。在D盤新建文件夾Picture,用來保存開啟視頻后抓取的每一幀圖片。其中的一個(gè)難點(diǎn)是,自動(dòng)保存圖片的時(shí)候每一張圖片的名字是否可以自動(dòng)創(chuàng)建。例如,test1.bmp,test2.bmp,test3.bmp.這里需要用到C+中的一些語法知識(shí)。(1) int轉(zhuǎn)string (2) 多個(gè)string之間的連接(3) String轉(zhuǎn)char *此處需要注意string s; s.data()或者s.c_str()的類型是const char *RealPlay()函數(shù)中寫入實(shí)現(xiàn)此功能的代碼:for(i=1;i!=0;i+) strin

10、gstream strStream;strStream<<i;string FileBMPName ="D:Picturetest"+strStream.str();FileBMPName += ".bmp"/后綴名.bmp/預(yù)覽時(shí),單幀數(shù)據(jù)捕獲并保存成圖片NET_DVR_CapturePicture(lRealPlayHandle,(char *)FileBMPName.data();Sleep(40);/執(zhí)行掛起40ms,即1s截取25張圖片,需要帶上頭文件windows.h 編譯通過之后運(yùn)行程序,點(diǎn)擊菜單開啟預(yù)覽,此時(shí)每隔40ms保存一

11、幀圖片,保存結(jié)果如下:1.2 不預(yù)覽情況下自動(dòng)保存圖片在文件菜單下添加“截圖”,根據(jù)ID號將該菜單加到程序中以實(shí)現(xiàn)截圖功能。首先聲明截圖函數(shù)void CapturePicture();分析菜單選擇中添加截圖的ID號:case ID_32773:CapturePicture();break;NET_DVR_CaptureJPEGPicture功能:單幀數(shù)據(jù)捕獲并保存成JPEG圖。BOOL NET_DVR_CaptureJPEGPicture( LONG lUserID, LONG lChannel, LPNET_DVR_JPEGPARA lpJpegPara, char *sPicFileNam

12、e);Parameters:lUserID in NET_DVR_Login或NET_DVR_Login_V30的返回值 lChannel in 通道號 lpJpegPara in JPEG圖像參數(shù) sPicFileName in 保存JPEG圖的文件路徑(包括文件名) Return Values:TRUE表示成功,F(xiàn)ALSE表示失敗。獲取錯(cuò)誤碼調(diào)用NET_DVR_GetLastError截圖函數(shù):CapturePicture()void CapturePicture()for(i=1;i!=0;i+)stringstream strStream;strStream<<i;stri

13、ng FileJPEGName ="D:Picturetest"+strStream.str();FileJPEGName += ".jpg"NET_DVR_JPEGPARA struJpegpara=0;struJpegpara.wPicQuality=2; /圖片質(zhì)量系數(shù):0-最好,1-較好,2-一般 struJpegpara.wPicSize=0;NET_DVR_CaptureJPEGPicture(lUserID,1,&struJpegpara,(char *)FileJPEGName.data();/單幀數(shù)據(jù)捕獲并保存成JPEG圖從運(yùn)行

14、結(jié)果看出每秒鐘只能抓取幾張圖片。1.3 編寫代碼查看保存一張圖片所用時(shí)間因?yàn)樵诓活A(yù)覽情況下保存圖片的效率很低,為了查看每幀圖片的保存時(shí)間,我們添加相應(yīng)的開始時(shí)間和結(jié)束時(shí)間函數(shù),來計(jì)算程序運(yùn)行時(shí)間。#include <iostream> #include <time.h> /關(guān)鍵 using namespace std; int main() clock_t start, finish; double totalTime; start = clock(); /需要測試運(yùn)行時(shí)間的代碼段放在這 finish = clock(); totalTime = (double)(fi

15、nish - start); cout<<"花費(fèi)"<<totalTime<<"毫秒"<<endl; return 0; 截圖函數(shù):CapturePicture()void CapturePicture()clock_t start,finish;double totalTime;for(i=1;i!=0;i+)start = clock(); /本行設(shè)置斷點(diǎn)stringstream strStream;strStream<<i;string FileJPEGName ="D:Pictu

16、retest"+strStream.str();FileJPEGName += ".jpg"NET_DVR_JPEGPARA struJpegpara=0;struJpegpara.wPicQuality=2; /圖片質(zhì)量系數(shù):0-最好,1-較好,2-一般 struJpegpara.wPicSize=0;NET_DVR_CaptureJPEGPicture(lUserID,1,&struJpegpara,(char *)FileJPEGName.data();/單幀數(shù)據(jù)捕獲并保存成JPEG圖/Sleep(40);finish = clock(); tota

17、lTime = (double)(finish-start); /本行設(shè)置斷點(diǎn)程序中在截取一張圖片的開始和結(jié)束處分別設(shè)置了斷點(diǎn),利用F5快捷鍵調(diào)試查看截取一張圖片的時(shí)間。totalTime的值為216ms,也就是說截一張圖需要216ms,那么1s只能截圖45張,可見該方法的抓圖效率太低。2. WIN7系統(tǒng)下搭建LINUX虛擬機(jī)如果日常工作使用LINUX和WIN7雙操作系統(tǒng),每次更換系統(tǒng)總要關(guān)機(jī)重啟很不方便,所以在WIN7下搭建LINUX虛擬機(jī)使用。2.1 工具以下是必備的文件:(1)ubuntu鏡像文件,32位的.iso文件,下載地址:(2)VMware安裝文件,百度直接搜索即可下載。操作步驟

18、:(1)首先安裝VMware,在WIN7上搭建一個(gè)虛擬環(huán)境。(2)在VMware的基礎(chǔ)上,通過ISO鏡像文件,搭建LINUX虛擬機(jī)。2.2 安裝VMware雙擊VMware的安裝包,出現(xiàn)如下界面,點(diǎn)擊下一步,繼續(xù)下一步,“我接受許可協(xié)議中的條款”,下一步,“典型”,出現(xiàn)如下界面,這里,要選擇安裝路徑。請記住,不要有中文和空格!當(dāng)然,并非說有空格和中文會(huì)出什么問題,但是最好不要有。比如JAVA環(huán)境的搭建,就不能有,因?yàn)槭菄獾能浖?,人家不認(rèn)識(shí)中文。為了以后出現(xiàn)莫名其妙的意外,最好不要加。下一步,“取消啟動(dòng)時(shí)檢查產(chǎn)品更新”,下一步“取消幫助改善VMware Workstation”,下一步,下一步

19、,繼續(xù),開始安裝安裝過程中需要輸入許可證密鑰,百度搜索到VMware Workstation 11序列號:1F04Z-6D111-7Z029-AV0Q4-3AEH8輸入,安裝向?qū)瓿伞?2.3 搭建LINUX虛擬機(jī)雙擊VMware Workstation軟件,打開界面,如圖:開始創(chuàng)建虛擬機(jī)。可以直接點(diǎn)擊主界面:創(chuàng)建新的虛擬機(jī)也可以:文件->新建虛擬機(jī)到了這一步,如下圖,仍然選擇“典型”安裝。然后,點(diǎn)擊下一步因?yàn)槲覀兪峭ㄟ^鏡像文件安裝,所以選擇“安裝程序光盤映象文件(ISO)(M)”這個(gè)選項(xiàng),瀏覽選擇鏡像文件所在的位置。如果是通過光盤安裝,就選擇上面那個(gè)。點(diǎn)擊下一步用戶名和密碼別忘記了,這

20、是一個(gè)普通用戶,安裝完畢后,你會(huì)靠它登錄系統(tǒng)的。這里的密碼是:ubuntu,點(diǎn)擊下一步安裝位置,最好不要有中文和空格。還有,安裝的盤要有足夠大的空間。點(diǎn)擊下一步磁盤大小,看個(gè)人需求,20G夠用,此處不再修改。點(diǎn)擊下一步,完成。之后會(huì)出現(xiàn)如下消息框:點(diǎn)擊取消更新正在安裝中。截圖如下,不需要任何操作,不過安裝是個(gè)挺漫長的過程。安裝成功,如圖所示,為我的登錄界面。輸入之前設(shè)定密碼ubuntu,就可以登錄了。2.4 安裝后的基本設(shè)置(1)登陸之后,先設(shè)置時(shí)間和日期(2) 點(diǎn)擊菜單虛擬機(jī)下的安裝VMware Tools,按照提示操作進(jìn)行安裝。(3) 搜索終端terminal,出現(xiàn)命令窗口。點(diǎn)擊打開終端在

21、左側(cè)一列圖標(biāo)中右擊終端,點(diǎn)“鎖定到啟動(dòng)器”,方便以后使用。(4) 修改系統(tǒng)語言為中文。System Setting Language Support點(diǎn)擊添加或刪除語言,添加Chinese(simple),添加完成后,在菜單和窗口的語言中將漢語(中國)拉到最上面,同時(shí)將“地區(qū)格式”一欄中的顯示數(shù)字,日期和貨幣數(shù)額的格式也設(shè)置為漢語(中國)。設(shè)置完成后,在終端執(zhí)行重啟命令reboot即可讓以上更改生效。3. 批處理刪除VS工程下的中間文件VS2012打開一個(gè)工程,轉(zhuǎn)換成功之后,在工程目錄中可以看到多了一個(gè)sdf文件和一個(gè)ipch文件夾(該文件夾子目錄下有一個(gè)ipch文件),起碼有幾十兆,這些文件刪

22、除之后并不會(huì)對工程本身有任何影響。所以我們建立一個(gè)批處理(bat)文件,用來刪除VS工程中的中間文件。步驟:(1) 新建一個(gè)文本文檔;(2) 在txt文檔中輸入相關(guān)批處理語句,下面會(huì)詳細(xì)說明兩種批處理方法;(3) 保存寫好的文檔,將擴(kuò)展名.txt修改為.bat,此時(shí)系統(tǒng)會(huì)提示你修改擴(kuò)展名會(huì)導(dǎo)致文件不能用,這時(shí)直接點(diǎn)擊確定。(4) 修改完擴(kuò)展名后,文件的圖標(biāo)會(huì)變成類似兩個(gè)齒輪一樣,這時(shí)把該文件放在工程目錄下,雙擊該文件,就可以執(zhí)行批處理刪除。彈出的窗口會(huì)提示你按任意鍵執(zhí)行,刪除成功之后按任意鍵退出就可以了。下面是兩種批處理方法。方法一:clearVS.batECHO OFF/批處理的開始語句de

23、l /S *.sdf /del是刪除文件命令rd /S ipch /rd是刪除文件夾命令或者:del /S *.ipch /因?yàn)槲募A并不占用硬盤空間,只需把子目錄下的ipch文件刪除執(zhí)行前:雙擊clearVS.bat,輸入Y,sdf文件和ipch文件夾已刪除。del命令一共有5個(gè)參數(shù),分別是/p、/f、/s、/q和/a。/p參數(shù)的作用是刪除每一個(gè)文件之前提示確認(rèn),這個(gè)參數(shù)的主要作用是當(dāng)你要?jiǎng)h除多個(gè)文件時(shí)(不用通配符)提示你確認(rèn)刪除,如果你只是刪除單個(gè)文件或多個(gè)文件(用通配符),默認(rèn)是不會(huì)提示你確認(rèn)刪除的。/f參數(shù)的作用是強(qiáng)制刪除只讀文件,當(dāng)我們刪除只讀文件時(shí),系統(tǒng)會(huì)提示拒絕訪問,這時(shí)就要利用

24、這個(gè)參數(shù)了。/s參數(shù)的作用是從所有子目錄刪除指定文件。/q參數(shù)的作用是刪除全局通配符時(shí),不要求確認(rèn)。當(dāng)我們利用全局通配符來刪除多個(gè)文件時(shí),默認(rèn)會(huì)提示你是否刪除所有文件,如果你用了這個(gè)參數(shù),系統(tǒng)就不會(huì)提示你了。/a參數(shù)的作用是根據(jù)屬性選擇要?jiǎng)h除的文件。其中,r表示只讀文件,s表示系統(tǒng)文件,h表示隱藏文件,a表示存檔文件,還有一個(gè) - 表示“否”的前綴。下面舉個(gè)實(shí)例來說明:我要?jiǎng)h除D:test目錄下的所有只讀文件,此時(shí)我只需在命令行中輸入del /a:r D:test*就可以了,相反,如果我要?jiǎng)h除除了只讀以外的所有文件,我就要輸入del /a:-r D:test*。rd命令只有2個(gè)參數(shù),分別是/s

25、和/q。/s參數(shù)的作用是除目錄本身外,還將刪除指定目錄下的所有子目錄和文件。用于刪除目錄樹。如果不帶這個(gè)參數(shù)就只能刪除空文件夾。/q參數(shù)的作用是安靜模式,帶/s刪除目錄樹時(shí)不需要確認(rèn)。方法二:clearVSTemp.batRem Delete VS temporary file / Rem是指定由DOS忽略的命令行Rem *echo Delete VS temporary filedir/w/s *.sdf *.ipch /刪除sdf文件和ipch文件echo 以上為當(dāng)前目錄及子目錄臨時(shí)文件,請按任意鍵確認(rèn)刪除!pausefor /r . %a in (.) do if exist "

26、;%a*.sdf" del "%a*.sdf"for /r . %a in (.) do if exist "%a*.ipch" del "%a*.ipch"echo 刪除成功!pauseRem *雙擊clearVSTemp.bat,按任意鍵繼續(xù),刪除成功之后按任意鍵退出。注意:本方法刪除的是sdf文件和ipch文件夾下的ipch文件,ipch文件夾沒必要?jiǎng)h除。4. Ubuntu中利用gcc和gdb編譯和調(diào)試程序4.1 單個(gè)C源文件的編譯(參數(shù)-o) 將一個(gè)C源文件編譯成可執(zhí)行文件的方法,標(biāo)準(zhǔn)格式如下: gcc -o 目標(biāo)文

27、件 源文件 如 gcc -o hello hello.c 命令執(zhí)行之后會(huì)產(chǎn)生一個(gè)hello文件,執(zhí)行hello文件即輸出:”Hello World” gcc最基本最常用的參數(shù)有:-c,只編譯,不鏈接成為可執(zhí)行文件,編譯器只是由輸入的.c等源代碼文件生成.o為后綴的目標(biāo)文件,通常用于編譯不包含主程序的子程序文件。-o output_filename,確定輸出文件的名稱為output_filename,同時(shí)這個(gè)名稱不能和源文件同名。如果不給出這個(gè)選項(xiàng),gcc就給出預(yù)設(shè)的可執(zhí)行文件a.out。-g,產(chǎn)生符號調(diào)試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進(jìn)行調(diào)試,我們就必須加入這個(gè)選項(xiàng)。4.

28、2 多個(gè)C源文件的編譯(參數(shù)-c和-o)對于一個(gè)文件,我們可以直接編譯成可執(zhí)行文件。而實(shí)際的開發(fā)過程中,可能由很多人同時(shí)開發(fā),每個(gè)人只開發(fā)部分的C源程序,最后再連接成一個(gè)可執(zhí)行程序。main.c程序如下:/filename:main.c#include<stdio.h>int main() int m; printf("Enter an integern"); scanf("%d",&m); printf("absolute value is %dn",absf(m); return 0; sub.c程序如下: /

29、filename:sub.c#include<stdio.h> int absf(int a) if(a<0) return -a; else return a; main.c編寫完之后進(jìn)行編譯,以確認(rèn)程序的語法是否正確。如果執(zhí)行前面提到過的語句gcc -o main main.c會(huì)提示未定義的參照absf。這是文件sub.c中的函數(shù)。所以,main.c在編譯時(shí)要用另外的參數(shù)-c來編譯,執(zhí)行g(shù)cc -c main.c,生成main.o文件。main.o這個(gè)文件是不可執(zhí)行的,-c參數(shù)代表只編譯,但在編譯過程中能夠檢查出是否存在語法錯(cuò)誤。用同樣的方式編譯sub.c,執(zhí)行g(shù)cc -c sub.c,生成sub.o文件。最后再用-o參數(shù)來連接到一起:執(zhí)行 gcc -o main main.o sub.o 生成最終的main文件就可以運(yùn)行了。4.3 利用gdb調(diào)試程序上面的例子程序都可以編譯通過,并且能夠執(zhí)行。實(shí)際的開發(fā)過程中就不一定這么幸運(yùn)了,經(jīng)常會(huì)遇到程序雖然可以通過編譯,但一運(yùn)行就出錯(cuò)的情況。這就要用到Ubuntu下的調(diào)試工具gdb了。gdb是linux下廣為應(yīng)用的程序調(diào)試工具,一般來說,gdb主要幫助你完成下面四個(gè)方

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論