我正在开发一个使用opencv监控实时车辆流量的应用程序,用c ++。
目前,我正在做背景减法方法以获得背景,然后我找到轮廓。
我使用createBackgroundSubtractorGMG方法来查找bg。
我面临的问题是在夜间,当车辆的前照灯打开时。道路上的照明区域也被检测为新的交通。有什么办法可以解决这个问题,还是我选择了一种完全错误的流量监控方法?
我遵循的流量检测方法如下,
空洞检测(Mat Frame){
Mat bg;
vector<Mat> Channels(3);
vector<Mat> channels;
cvtColor(frame,bg,CV_BGR2YCrCb);
split(bg,Channels);
equalizeHist(Channels[0], Channels[0]);
equalizeHist(Channels[1], Channels[1]);
channels.push_back(Channels[0]);
channels.push_back(Channels[1]);
channels.push_back(Channels[2]);
cv::merge(channels, bg);
cv::GaussianBlur(bg, bg, cv::Size(5,5), 1.5);
pMOG->apply(bg, fore);
cv::GaussianBlur(fore, fore, cv::Size(11,11), 1.5);
findContours(fore,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE);
vector<vector<Point> > contours_poly(contours.size());
vector<Rect> boundRect(contours.size());
double area;
bool found;
for(size_t i = 0; i < contours.size(); i++ )
{
boundRect[i] = boundingRect( Mat(contours[i]) );
}
}