幀間差分演算法
阿新 • • 發佈:2018-12-20
第一步:從攝像頭採集視訊成一幀一幀的影象
函式vecdiocapture capture(0/1);if(!capture.isopen());開啟攝像頭如果失敗就輸出“OPEN CAMERA FAIL”
第二步:把當前幀的影象灰度化cvtColor();然後取當前幀的影象與上一幀的影象做差subtract();並且絕對值abs();然後把取完絕對值的圖片位深從16變為8 convertTo()最後還要進行閾值化threshold();大於閾值的就賦予該點255否則賦予0 .。
第三步:通過迭代器方法遍歷閾值化後的影象的每一個畫素點:
cv::Mat_<uchar>::iterator it = resule_grayimg.begin<uchar>(); cv::Mat_<uchar>::iterator itend = resule_grayimg.end<uchar>(); for (; it != itend; ++it) { if ((*it)>0) counter += 1;//二值化後,畫素點是0或者255 }//如果畫素點不為零就累計counter加一。
第四步:通過判斷counter畫素點的個數判斷攝像頭拍攝的物體是否由移動,當有移動時相鄰兩幀影象的差值的絕對值就會大於零,改變數越大差值的絕對值越大。