OpenCV控制攝像頭實現(xiàn)-拍照功能-【轉(zhuǎn)載】_第1頁
OpenCV控制攝像頭實現(xiàn)-拍照功能-【轉(zhuǎn)載】_第2頁
OpenCV控制攝像頭實現(xiàn)-拍照功能-【轉(zhuǎn)載】_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

OpenCV控制攝像頭實現(xiàn)

拍照功能注意注釋局部,其中使用的比擬生疏的API包括

cvPyrDown

,

cvCreateCameraCapture以及

cvCopy

cvSaveImage下面就來一一解釋這幾個API的具體使用:void

cvPyrDown(constCvArr*src,CvArr*dst,intfilter=CV_GAUSSIAN_5x5);其中src為CvArr*類型,這里順便解釋一下OpenCV根本上是用C實現(xiàn)的,當(dāng)然其中包括一定的C++成分,但是OpenCV中仍然也使用了面向?qū)ο蟮乃枷?,即有以下的繼承關(guān)系:所以在實際使用當(dāng)中,完全可以使用〞子類〞CvMat或者是IplImage來代替CvArr,也就是說在參數(shù)中完全可以傳入一個IplImage類型,src代表的就是源圖像,即傳入函數(shù)的圖像,而dst那么是輸出圖像,即縮放一倍后的圖像,但是需要注意的是,在這里傳入的dst圖像必須是在初始化以后才能傳入,對于這一點,在下面的Demo中可以看到。而至于卷積濾波器的類型那么一般采用默認(rèn)類型即可。CvCapture*

cvCreateCameraCapture(intindex);大伙應(yīng)該還記得

cvCreateFileCapture

這個函數(shù)嗎?其實對于

cvCreateFileCapture

來說,其是根據(jù)一個指定的視頻文件來初始化,而對于

cvCreateCameraCapture

那么不同,其是通過初始化一個視頻設(shè)備(也可以看做就是一個攝像頭),初始化以后,便可以從這個攝像設(shè)備中獲取視頻了。至于參數(shù)index的話,如果您的電腦上連接了多個攝像設(shè)備,那么需要通過這個

index

來指定到底要使用哪一個攝像頭。void

cvCopy(constCvArr*src,CvArr*dst,constCvArr*mask=NULL);這個函數(shù)的作用是拷貝一個數(shù)組到另一個數(shù)組,而根據(jù)前面的繼承關(guān)系,IplImage

繼承自

CvMat,而CvMat又是繼承于

CvArr,所以在此處可以直接傳入一個

IplImage

來實現(xiàn)拷貝,很明顯,src是傳入的數(shù)組,而dst那么是復(fù)制完成后返回的結(jié)果數(shù)組,而至于mask這個數(shù)組呢,比擬變態(tài),它指定了數(shù)組src中哪些元素需要拷貝到dst數(shù)組中,哪些元素不能夠拷貝到dst數(shù)組中,mask數(shù)組中標(biāo)記為非0的那么可以拷貝到dst中,標(biāo)記為0的那么不會拷貝到dst數(shù)組當(dāng)中去。這里需要注意的是,dst數(shù)組和src數(shù)組必須是相同的類型,并且具有相同的維數(shù)和大小,否那么整個程序會崩潰。int

cvSaveImage(constchar*filename,constCvArr*image);這個函數(shù)的作用很明顯,即保存圖片到文件,而至于保存的圖片的文件那么看

filename

這個參數(shù)指定的后綴名是什么了。[cpp]viewplaincopyprint?#include

"stdafx.h"#include"cv.h"#include"highgui.h"#include"stdio.h"http://

實現(xiàn)將拍下來的圖片縮放一倍IplImage*

DoPyrDown(IplImage*

image,

int

filter

=

IPL_GAUSSIAN_5x5)

{

//

設(shè)置大小縮小一倍

CvSize

size

=

cvSize(image->width

/

2,image->height

/

2);

//初始化圖片

IplImage*

outImage

=

cvCreateImage(size,image->depth,image->nChannels);

//實現(xiàn)縮放

cvPyrDown(image,outImage);

cvReleaseImage(&image);

return

outImage;

}

int

main(int

argc,

char**

argv)

{

cvNamedWindow("vedio");

CvCapture*

capture;

//

首先是要通過攝像設(shè)備來得到一個CvCapture對象if(1

==

argc)

{

capture

=

cvCreateCameraCapture(0);

}

else

{

capture

=

cvCreateCameraCapture(atoi(argv[1]));

}

assert(NULL

!=

capture);

IplImage*

frame;

char

keyCode;

//

每隔30ms捕捉一次視頻圖像//

可以設(shè)為while(1)

使得實時捕捉視頻畫面while((keyCode

=

cvWaitKey(30)))

{

//表示按下了ESC鍵,退出if(keyCode

==

27)

{

break;

}

//表示按下了回車鍵,此時應(yīng)當(dāng)保存照片if(keyCode

==

13)

{

//初始化一張圖片

IplImage*

outImage

=

cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels);

//

將原圖拷貝過來

cvCopy(frame,outImage,NULL);

//實現(xiàn)縮放操作

outImage

=

DoPyrDown(outImage);

//設(shè)置保存的圖片名稱和格式char*

outImageName

=

"test.jpg";

//保存圖片

cvSaveImage(outImageName,outImage);

cvReleaseImage(&outImage);

printf("

恭喜你,保存圖片成功!\n");

}

//

得到攝像設(shè)備的下一幀圖像

frame

=

cvQueryFrame(capture);

if(!frame)

{

溫馨提示

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

最新文檔

評論

0/150

提交評論