opencv运动车里检测跟踪轨迹不对

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv运动车里检测跟踪轨迹不对相关的知识,希望对你有一定的参考价值。

正确轨迹应该是红色的,而实际得到的是绿色的那条轨迹
背景提取代码:
CvMat* pFrameMat = NULL; CvMat* pFrMat = NULL; CvMat* pBkMat = NULL; int nFrmNum = 0; //创建窗口 cvNamedWindow("BackImg",1); while(nFrmNum<=140) pFrame = cvQueryFrame( pCapture ); if(!pFrame) break; nFrmNum++; //如果是第一帧,需要申请内存,并初始化 if(nFrmNum == 1) pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height),8,1); pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), 8,1); pBkMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1); pFrMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1); pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1); //转化成单通道图像再处理 cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY); cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY); cvConvert(pFrImg, pFrameMat); cvConvert(pFrImg, pFrMat); cvConvert(pFrImg, pBkMat); else cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY); cvConvert(pFrImg, pFrameMat); //先做高斯滤波,以平滑图像 cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 0, 0); //当前帧跟背景图相减 cvAbsDiff(pFrameMat, pBkMat, pFrMat); //二值化前景图 cvThreshold(pFrMat, pFrImg, 10, 255.0, CV_THRESH_BINARY); //更新背景 cvRunningAvg(pFrameMat, pBkMat, 0.003, 0); //将背景转化为图像格式,用以显示 cvConvert(pBkMat, pBkImg);
pFrame->origin = IPL_ORIGIN_BL; pFrImg->origin = IPL_ORIGIN_BL; pBkImg->origin = IPL_ORIGIN_BL; cvFlip(pFrame,pFrame,0); cvShowImage("video", pFrame); cvFlip(pBkImg,pBkImg,0); cvShowImage("BackImg", pBkImg); cvShowImage("BackImg",pBkImg);

参考技术A 我最近在弄这个,步骤大致是这样,先对视频进行背景建模,然后差分得出运动物体,二值化前景,找轮廓,遍历轮廓把运动物体框住,定义结构体对比前后两帧质心,相差不大的可以视为一个物体(一般视频里的2帧质心都不大,准确率比较高),跟踪成功追问

可是我跟踪的轨迹不正确啊,如果我用差分法得到的背景去跟踪轨迹就是正确的,我用混合高斯模型得到的背景去跟踪,轨迹就错了,这是为什么呢???

用OpenCV怎么才能把运动目标的轨迹用点画出来?

为什么只能画出跟踪的当前点,而没有之前的点,求大神帮忙修改一下啊
cv::Mat cImageBGR;
cv::Point2f mypoint;
vector<cv::Point2f> points;
points.push_back(mypoint);
for ( int j = 0; j < points.size(); ++ j )

cv::circle( cImageBGR, points[j], 3, cv::Scalar( 0, 0, 255 ), 4 );

参考技术A 1. 定时向画面上画出当前目标的坐标
2. 使用带点的画刷,来画线。本回答被提问者采纳

以上是关于opencv运动车里检测跟踪轨迹不对的主要内容,如果未能解决你的问题,请参考以下文章

运动目标检测——光流法与opencv代码实现

用OpenCV怎么才能把运动目标的轨迹用点画出来?

求基于OpenCV的三帧差分算法代码

使用 OpenCV 进行运动检测

opencv中的快速运动检测

现在想用OPENCV作运动目标的识别和跟踪,用啥方法最好,最快入门?