上圖使用absdiff影象減法函式,**如下:
//二值化腐蝕膨脹學習,幀差法和背景差法對比測試
#include#includeusing namespace cv;
using namespace std;
int main(int argc, char** ar**)
幀差法也是使用absdiff影象減法函式,只不過是相鄰幀影象相減(下圖假設是相鄰幀,笑臉從左往右移動到飛機尾部),找出差異的部分。例如下面兩個影象的例子:
**如下(實際上和上面**是一樣的,只是為了突出對比一下):
//二值化腐蝕膨脹學習,幀差法和背景差法對比測試
檢測效果較好,檢測出來的差異基本上就是車輛的樣子,但是要知道,如果運動目標非常快,就會出現和上面實驗一樣,出現這種情況:
**如下:
///運動物體檢測——幀差法、缺點是無法對運動後突然又靜止的景象進行識別,優點是光照不影響;
#include "opencv2/opencv.hpp"
using namespace cv;
#include using namespace std;
//運動物體檢測函式宣告
mat movedetect(mat temp, mat frame);
int main()
int framecount = video.get(cv_cap_prop_frame_count);//獲取幀數
double fps = video.get(cv_cap_prop_fps);//獲取fps
mat frame;//儲存幀
mat temp;//儲存前一幀影象
mat result;//儲存結果影象
for (int i = 0; i < framecount; i++)
int frameposition = video.get(cv_cap_prop_pos_frames);//獲取幀位置(第幾幀)
cout << "frameposition: " << frameposition << endl;
if (i == 0) //如果為第一幀(temp還為空)
absdiff(frame, frame, result);
else //若不是第一幀(temp有值了)
absdiff(temp, frame, result);//2.將前一幀temp影象和當前幀frame影象做差
imshow("result", result);
if (waitkey(1000.0 / fps) == 27)//按原fps顯示
temp = frame.clone();//當前幀賦給temp作為下一幀的前一幀
} return 0;
}
再來看看背景差法(使用第一幀做背景)
現在我們雖然把前景(檢測目標)提取出來了, 我們需要將這些目標的輪廓畫出來, 並用矩形框標識出來。
//二值化腐蝕膨脹學習,幀差法和背景差法對比測試
#include#includeusing namespace cv;
using namespace std;
int main(int argc, char** ar**)
//輪廓的顏色;輪廓線條的粗細預設為1
imshow("9繪製正外接矩形", frame);
waitkey(0);
return 0;
}
最後來看乙個幀差法檢測運動目標的完整**:
完整**如下:
///運動物體檢測——幀差法、缺點是無法對運動後突然又靜止的景象進行識別,優點是光照不影響;
#include "opencv2/opencv.hpp"
using namespace cv;
#include using namespace std;
//運動物體檢測函式宣告
mat movedetect(mat temp, mat frame);
int main()
int framecount = video.get(cv_cap_prop_frame_count);//獲取幀數
double fps = video.get(cv_cap_prop_fps);//獲取fps
mat frame;//儲存幀
mat temp;//儲存前一幀影象
mat result;//儲存結果影象
for (int i = 0; i < framecount; i++)
int frameposition = video.get(cv_cap_prop_pos_frames);//獲取幀位置(第幾幀)
cout << "frameposition: " << frameposition << endl;
if (i == 0)//如果為第一幀(temp還為空)
else//若不是第一幀(temp有值了)
imshow("result", result);
if (waitkey(1000.0 / fps) == 27)//按原fps顯示
temp = frame.clone();//當前幀賦給temp作為下一幀的前一幀
} return 0;
}mat movedetect(mat temp, mat frame)
return result;//返回result
}
運動目標檢測OpenCV背景減除法
背景減除法 1.gmm mog2演算法,高斯混合模型分離演算法,它為每個畫素選擇適當數量的高斯分布 函式 cv2.createbackgroundsubtractormog2 int history 500,double varthread 16,bool detectshadows true 2....
OpenCV之幀差法檢測運動目標
今天的目標是用opencv實現對運動目標的檢測,這裡選用三幀幀差法。如下 include include include include include double threshold index 0 const int contour max aera 200 void trackbar int...
OpenCV實現幀差法檢測運動目標
今天的目標是用opencv實現對運動目標的檢測,這裡選用三幀幀差法。如下 include include include include include double threshold index 0 const int contour max aera 200 void trackbar int...