




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C++如何調(diào)用opencv完成運(yùn)動(dòng)目標(biāo)捕捉詳解目錄一、原理說明:二、過程詳解:總結(jié)使用編譯器:QtCreator4.2.1
一、原理說明:
差幀識別原理:將這一幀的圖像和上一幀的圖像進(jìn)行比對,產(chǎn)生變化的即為運(yùn)動(dòng)的目標(biāo)像素塊
二、過程詳解:
1.將傳入的兩幀先進(jìn)行灰度處理,轉(zhuǎn)化將rgb類型圖片轉(zhuǎn)化為灰度圖,可大大降低處理時(shí)間和資源消耗
將轉(zhuǎn)換后的圖片轉(zhuǎn)存至frontGray和afterGray
cvtColor(frontFrame,frontGray,CV_BGR2GRAY);
cvtColor(afterFrame,afterGray,CV_BGR2GRAY);
2.將兩幀圖片進(jìn)行差幀處理
將有差別的像素轉(zhuǎn)存至diff
//幀差處理找到兩幀之間運(yùn)動(dòng)物體差異
//缺點(diǎn):會(huì)捕捉所有運(yùn)動(dòng)的物體,沒辦法專門捕捉某個(gè)目標(biāo)
absdiff(frontGray,afterGray,diff);
效果如下:
3.將圖像二值化,只有黑和白,便于計(jì)算機(jī)計(jì)算,但是會(huì)產(chǎn)生噪點(diǎn)(后續(xù)會(huì)進(jìn)行簡單的降噪操作)
//二值化:使其變得更加黑白分明,便于計(jì)算,會(huì)產(chǎn)生噪點(diǎn)
threshold(diff,diff,25,255,CV_THRESH_BINARY);
效果如下:
一個(gè)個(gè)單獨(dú)的小白點(diǎn)就是噪點(diǎn),是因?yàn)楣饩€反光和樹葉的晃動(dòng)
4.腐蝕處理,腐蝕掉x*x方塊大小的像素,我這里設(shè)置了4*4,清除大部分噪點(diǎn)
//腐蝕處理:去除大部分的白色噪點(diǎn)
Matelement=cv::getStructuringElement(MORPH_RECT,Size(4,4));
//小于4*4方塊的白色噪點(diǎn)都會(huì)被腐蝕
erode(diff,diff,element);
效果如下,噪點(diǎn)確實(shí)少了很多,但是運(yùn)動(dòng)的物體也被腐蝕掉了很多,可能會(huì)出現(xiàn)漏掉運(yùn)動(dòng)物體的情況
可以發(fā)現(xiàn),噪點(diǎn)幾乎沒有了,但是車輛的像素也被腐蝕了
5.膨脹處理,把去除過噪點(diǎn)的像素圖像膨脹,變大,我這里膨脹了30*30
//膨脹處理:將白色區(qū)域變"胖",便于識別
Matelement2=cv::getStructuringElement(MORPH_RECT,Size(30,30));
dilate(diff,diff,element2);
效果如下:
小像素變成大果粒了
6.將變動(dòng)過的像素目標(biāo)打上標(biāo)記(注意要在原幀上進(jìn)行標(biāo)記)
//動(dòng)態(tài)物體標(biāo)記
vectorvectorPointcontours;//用于保存關(guān)鍵點(diǎn)
findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));
//提取關(guān)鍵點(diǎn)
vectorvectorPointcontours_poly(contours.size());
vectorRectboundRect(contours.size());
intx,y,w,h;
intnum=contours.size();
for(inti=0;ii++)
approxPolyDP(Mat(contours[i]),contours_poly[i],3,true);
boundRect[i]=boundingRect(Mat(contours_poly[i]));
x=boundRect[i].x;
y=boundRect[i].y;
w=boundRect[i].width;
h=boundRect[i].height;
//繪制
rectangle(resFrame,Point(x,y),Point(x+w,y+h),Scalar(0,255,0),2);
}
效果如下:
實(shí)際效果,偶爾有樹葉飄動(dòng)會(huì)產(chǎn)生一點(diǎn)點(diǎn)干擾
三、代碼
#includeiostream
#includeopencv2/opencv.hpp
usingnamespacecv;
usingnamespacestd;
MatmoveCheck(MatfrontFrame,MatafterFrame)
MatfrontGray,afterGray,diff;
MatresFrame=afterFrame.clone();
//灰度處理,節(jié)省運(yùn)算時(shí)間
cvtColor(frontFrame,frontGray,CV_BGR2GRAY);
cvtColor(afterFrame,afterGray,CV_BGR2GRAY);
//幀差處理找到兩幀之間運(yùn)動(dòng)物體差異
//缺點(diǎn):會(huì)捕捉所有運(yùn)動(dòng)的物體,沒辦法專門捕捉某個(gè)目標(biāo)
absdiff(frontGray,afterGray,diff);
//二值化:使其變得更加黑白分明,便于計(jì)算,會(huì)產(chǎn)生噪點(diǎn)
threshold(diff,diff,25,255,CV_THRESH_BINARY);
//腐蝕處理:去除大部分的白色噪點(diǎn)
Matelement=cv::getStructuringElement(MORPH_RECT,Size(4,4));//小于4*4方塊的白色噪點(diǎn)都會(huì)被腐蝕
erode(diff,diff,element);
//膨脹處理:將白色區(qū)域變"胖",便于識別
Matelement2=cv::getStructuringElement(MORPH_RECT,Size(30,30));
dilate(diff,diff,element2);
//動(dòng)態(tài)物體標(biāo)記
vectorvectorPointcontours;//用于保存關(guān)鍵點(diǎn)
findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));
//提取關(guān)鍵點(diǎn)
vectorvectorPointcontours_poly(contours.size());
vectorRectboundRect(contours.size());
intx,y,w,h;
intnum=contours.size();
for(inti=0;ii++)
approxPolyDP(Mat(contours[i]),contours_poly[i],3,true);
boundRect[i]=boundingRect(Mat(contours_poly[i]));
x=boundRect[i].x;
y=boundRect[i].y;
w=boundRect[i].width;
h=boundRect[i].height;
//繪制
rectangle(resFrame,Point(x,y),Point(x+w,y+h),Scalar(0,255,0),2);
returnresFrame;
intmain(intargc,char*argv[])
Matframe;
Mattemp;
Matres;
intnum=0;
VideoCapturecap("D:/VideoTraining/carMove.mp4");
while(cap.read(frame))
num++;
if(num==1)
{//如果為第一幀則把當(dāng)前幀傳入(即不產(chǎn)生效果)
res=moveCheck(frame,frame);
else
{//從第二幀開始才有差幀
res=moveCheck(temp,frame);
temp=frame.clone();//此處注意要調(diào)用.clone深拷貝,否則會(huì)出現(xiàn)兩個(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家庭教育指導(dǎo)服務(wù)市場家庭教育產(chǎn)品與服務(wù)創(chuàng)新趨勢報(bào)告
- n1叉車考試試題及答案500道
- 特色美食餐廳股權(quán)轉(zhuǎn)讓及品牌形象推廣合同
- mooc中醫(yī)學(xué)基礎(chǔ)考試試題及答案
- java框架面試題機(jī)試及答案
- 農(nóng)業(yè)產(chǎn)業(yè)集群綠色生產(chǎn)與循環(huán)經(jīng)濟(jì)發(fā)展報(bào)告
- 軟件測試工程師考試的社會(huì)責(zé)任試題及答案
- 2025南京市購銷合同范文
- 計(jì)算機(jī)二級ACCESS考試中的關(guān)鍵試題與答案
- 革新學(xué)習(xí)經(jīng)濟(jì)法試題及答案
- 2024年江蘇省南通市中考地理試題卷(含答案)
- 制冷設(shè)備出售維修合同模板
- 2024-2025學(xué)年八年級語文上冊期末專項(xiàng)復(fù)習(xí):散文閱讀【考點(diǎn)清單】
- 家庭車輛掛別人名下協(xié)議書范文
- 電廠運(yùn)行維護(hù)管理制度
- 斜屋面瓦片施工協(xié)議
- 人工智能導(dǎo)論學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 人工智能通識教程 第2版 課件全套 周蘇 第1-15章 思考的工具- 人工智能發(fā)展
- 2024年河南住院醫(yī)師-河南住院醫(yī)師口腔科考試近5年真題集錦(頻考類試題)帶答案
- 2024小紅書影像賽道賺錢趨勢詳解
評論
0/150
提交評論