国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Opencv學習筆記【一】

2019-11-08 20:23:16
字體:
來源:轉載
供稿:網(wǎng)友
  由于以后研究生會用到Opencv,于是最近開始了對Opencv的學習,我用的參考學習資料是 《Learnning Opencv》,開發(fā)環(huán)境是 VS2013+Opencv 2.4.13。  寫博客的目的差不多像是寫一篇學習筆記一樣,我是菜鳥初學者,文中難免會有不當之處,還請大家不吝賜教~。  (1)SVN     看《Learning Opencv》的時候,碰到了SVN這個詞,SVN是Subversion的縮寫。

     Subversion是一個自由,開源的版本控制系統(tǒng)。在Subversion管理下,文件和目錄可以超越時空。Subversion將文件存放在中心版本庫里。這個版本庫很像一個普通的文件服務器,不同的是,它可以記錄每一次文件和目錄的修改情況。這樣就可以籍此將數(shù)據(jù)恢復到以前的版本,并可以查看數(shù)據(jù)的更改細節(jié)。正因為如此,許多人將版本控制系統(tǒng)當作一種神奇的“時間機器”。

  ( 英語單詞解釋:   Trunk:總線  Wiki:維基 

                                Garage:車庫,存放區(qū) // (英 ['g?rɑ?(d)?; -?d?; g?'rɑ??]美 [g??rɑ?; g??rɑd?])    )

  (2)OpenCV的組織結構

OpenCV包含5個模塊,其中四個模塊如下圖所示:

除了以上4個模塊之外,還有一個CVAux模塊,該模塊一般存放一些即將被淘汰的算法和函數(shù),同時還有一些新出現(xiàn)的實驗性的算法和函數(shù)。

未來CVAux中的一些函數(shù)、算法可能會被合并到CV模塊,也可能永遠留在CVAux模塊中。

(3) VS2013+OpenCV2.4.13的配置

首先從opencv官網(wǎng)上下載opencv-2.4.13.exe,之后選擇解壓目錄為D:/PRogramFiles/,之后點擊Extract按鈕,便進行解壓,等待一段時間之后,解壓就完成了,大小大約為3個G左右。(由于此處解壓會自動生成根目錄opencv,所以不需要提前新建一個叫Opencv的文件夾)。

   之后,便開始配置環(huán)境變量。(我的電腦->右鍵->屬性->高級系統(tǒng)設置->環(huán)境變量)在用戶變量上添加上opencv這個變量,值為D:/ProgramFiles/opencv/build。之后在用戶變量區(qū)的PATH上(若無,則需先創(chuàng)建PATH變量)添加值D:/ProgramFiles/opencv/build/x86/vc12/bin。

   接下來在系統(tǒng)變量區(qū)的PATH變量上,添加值D:/ProgramFiles/opencv/build/x86/vc12/bin。

由于我用的是VS2013,所以對應的是vc12。(vc10對應VS2010,vc11對應vs2012,vc12對應vs2013)

  至此,我們就完成了對環(huán)境變量的配置,我們打開VS2013。

點擊【新建】,創(chuàng)建項目,選擇創(chuàng)建【W(wǎng)in32控制臺應用程序】,點擊【確定】,點擊【下一步】,勾上【空項目】那個勾。

之后的步驟大致與Baidu經(jīng)驗上面講的一致,詳見

http://jingyan.baidu.com/article/acf728fd56f894f8e510a3d8.html。

以上為我自己配置opencv開發(fā)環(huán)境的一些過程,希望能給大家一些參考。

部分內容參考自:

http://jingyan.baidu.com/article/acf728fd56f894f8e510a3d8.html

http://blog.csdn.net/SherryD/article/details/51734334

關于一次配置,永久使用的問題可參照知乎網(wǎng)友的回答:

https://www.zhihu.com/question/24400428

(4)opencv AVI視頻讀取

 Opencv可以用CvCreateFileCapture(const char* filename)這個函數(shù)來打開AVI文件,返回值為CvCapture*類型指針,其中參數(shù)即為AVI文件所對應的Pathname。

 

cvQueryFrame(CVCapture*)用來獲取Frame圖像,返回值為ipLImage*

cvWaitKey(N);//(N>0時)等待N ms,返回值為用戶按鍵的鍵值  N<=0時,等待用戶按下一個按鍵。  ESC的鍵值為27

使用CvCapture和cvLoadImage不一樣,此處IPLImage存放于CvCapture結構體中,沒有單獨開辟空間,所以不需要ReleaseImage,只需要ReleaseCapture即可。而若使用CvLoadImage,則在使用完之后,需要調用ReleaseImage(),以免造成內存泄漏;

CvCreateTrackbar()  //創(chuàng)建滾動條

【slide     英 [sla?d]   美 [sla?d]  vi.滑落;下跌;打滑;[棒球]滑壘 n. 幻燈片;降低】

為了使我們的程序可讀性更強,我們可在所有的全局變量前面加上g_

【滾動條TrackBar】

cvCreateTrackbar("Track_bar","Video",&g_slider_postion, frames, onTrackbarSlide);

g_slider_postion為事先定義好的int (32bits整形變量),用來記錄TrackBar的滑動位置,創(chuàng)建TrackBar時,就已經(jīng)和TrackBar關聯(lián)好了。

frames為視頻總幀數(shù),可通過CvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT)獲取到。

當Bar滑動時,OnTrackBarSlide回調函數(shù)(需要自己編寫,若無,該處可設為NULL)即被調用,g_slider_postion作為實參被傳遞過去,通過cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);

每顯示一幀圖像,可以讓g_slider_postion++,再調用cvSetTrackbarPos("Track_bar","Video", g_slider_postion),這樣便事先了滾動條隨著視頻播放而不斷移動了。

(5) CvLoadImgae函數(shù)

  cvLoadImage()函數(shù)原型:

cvLoadImage(constchar* filename,int iscolorCV_DEFAULT(CV_LOAD_IMAGE_COLOR))

第1個參數(shù)是圖像文件名,如”D:/pic.jpg”

第2個參數(shù)是讀取圖像的方式,-1 表示按照圖像本身的類型來讀取,1表示強制彩色化,0 表示強制灰值化

(6)讀取AVI視頻并播放,且?guī)в袧L動條的程序代碼實現(xiàn)如下:

#include<iostream>#include "highgui.h"/*該程序實現(xiàn)了對Test.avi的讀取播放,并實現(xiàn)了進度滾動條的功能。(播放過程中可按ESC鍵退出播放)*/using namespace cv;CvCapture* g_capture = NULL;int g_slider_postion = 0;//滾動條滑動位置記錄變量,32位整數(shù)值void onTrackbarSlide(int pos)  //滾動條滾動時的回調函數(shù){	cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos);}int main(int argc,char** argv){	g_capture = cvCreateFileCapture("Test.avi");//讀入AVI,創(chuàng)建CvCapture結構于AVI文件開頭.	cvNamedWindow("Video", CV_WINDOW_AUTOSIZE);	int frames =(int) cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT);//得到AVI視頻總幀數(shù),為g_slider_pos的max值	if (frames != 0)	{		cvCreateTrackbar("Track_bar", "Video", &g_slider_postion, frames, onTrackbarSlide);             //當視頻總幀數(shù)可以獲取時,創(chuàng)建TrackBar	}//g_slider_postion記錄滑動位置,frames為滑動位置最大值,onTrackbarSlide為回掉函數(shù)	char c;	IplImage *img = NULL;	while (1)	{		img = cvQueryFrame(g_capture);  //讀入一幀圖片至CvCapture結構中		if (!img) break;//讀取結束,Break		cvShowImage("Video", img);		g_slider_postion++;		cvSetTrackbarPos("Track_bar", "Video", g_slider_postion);		c = cvWaitKey(33);   //幀率為  30幀/s  1幀=33Ms   此處為人為指定幀率,也可以通過CvCapture結構體中成員精確控制幀率		if (c == 27) break;  //27是ESC的ASCII鍵值	}	cvDestroyWindow("Video");	cvReleaseCapture(&g_capture);	return 0;}

(7)在VS2013中直接編譯運行上述程序時,出現(xiàn)了一個Error

   error C4996:'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online helpfor details.  

 

由于CV模塊中某些頭文件中包含了fopen這個函數(shù),所以在VS2013開發(fā)環(huán)境下,會報錯fopen不安全(我嘗試過將庫文件里報錯的地方fopen改為fopen_s,但是會導致更多的錯誤,因此我選擇了禁用安全警告)只需選擇【項目】->【屬性】->【c/c++】->【預處理器】->【預處理定義】->【點擊下拉按鈕】,之后添加_CRT_SECURE_NO_WARNINGS的定義即可。

 禁用安全警告之后,編譯運行無誤,程序達到了預期的效果:


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 合作市| 枣庄市| 清镇市| 涡阳县| 宜章县| 宜州市| 文安县| 宁阳县| 黔西县| 双鸭山市| 长寿区| 会东县| 西和县| 宣化县| 鄂伦春自治旗| 改则县| 柏乡县| 禄劝| 绿春县| 兴业县| 淮南市| 莎车县| 双桥区| 祁门县| 南川市| 康乐县| 鹿泉市| 河北区| 广饶县| 县级市| 海城市| 崇仁县| 岳西县| 隆尧县| 沙坪坝区| 汕头市| 昌图县| 襄樊市| 朝阳区| 涡阳县| 大连市|