nglnc_0629 2017-12-21 02:43 采纳率: 0%
浏览 1136
已结题

如何将高斯混合模型(c++)特征提取后的视频或序列图片保存?

//#include "stdafx.h"
#include "windows.h"
#include "math.h"
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include "cvaux.h"
#include "ml.h"
/******************************************************主函数********************************************************/
int main(int argc, char argv[])
{
CvScalar color_tab[10];
color_tab[0] = CV_RGB(255, 0, 0);
color_tab[1] = CV_RGB(0, 255, 0);
color_tab[2] = CV_RGB(0, 0, 255);
color_tab[3] = CV_RGB(255, 0, 255);
color_tab[4] = CV_RGB(255, 255, 0);
CvCapture
capture = cvCreateFileCapture("E:\shiyan\flow1.mov");
int fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); //获取视频文件的属性,帧率
IplImage* pFrame = NULL; //创建一个当前帧的指针
pFrame = cvQueryFrame(capture); //将下一帧加入内存(在cvCapture中分配了内存),返回对应当前帧的指针,
if (!pFrame)
{
printf("Bad frame /n");
exit(0);
}
CvGaussBGStatModelParams* params = new CvGaussBGStatModelParams; //直接调用高斯混合模型的函数
params->win_size = 1000; //学习效率a=1/win_size
params->n_gauss = 5; //5个混合高斯模型
params->bg_threshold = 0.1; //高斯背景阈值
params->std_threshold = 3.5; //lamuda=3.5
params->minArea = 30; //最小高斯核的面积
params->weight_init = 0.05; //初始权重为0.05
params->variance_init = 30; //初始标准差为30
CvBGStatModel* bgModel = cvCreateGaussianBGModel(pFrame, params); //创建高斯混合模型
while (1)
{
pFrame = cvQueryFrame(capture);
if (!pFrame)
break;
cvUpdateBGStatModel(pFrame, bgModel); //更新高斯混合模型
IplImage*img = bgModel->foreground; //指向前景
//cvConvexHull();
//printf("%d",img->);
int cols = 3, rows = 3, anchor_x = 1, anchor_y = 1;
int values[] = { 0, 1, 0,
1, 1, 0,
0, 0, 0 };
IplConvKernel*element = cvCreateStructuringElementEx(cols, rows, anchor_x, anchor_y, CV_SHAPE_CUSTOM, values); //自定义3x3的核
cvDilate(img, img, element, 4); //形态学膨胀,4次
IplImage*Img = cvCreateImage(cvGetSize(img), img->depth, img->nChannels);
cvCopy(img, Img);
CvMemStorage*storage, *stor; //创建存储空间指针
CvSeq*cont1, *cont2;
//创建序列指针
stor = cvCreateMemStorage(0);
//指向的存储位置
cont1 = cvCreateSeq(CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint), stor);
cvFindContours(img, stor, &cont1, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_NONE, cvPoint(0, 0));
//cont=bgModel->foreground_regions;
int i = 0;
for (; cont1; cont1 = cont1->h_next)
{
if (cont1->total continue;
cont2 = cvApproxPoly(cont1, sizeof(CvContour), stor, CV_POLY_APPROX_DP, cvContourPerimeter(cont1)*0.001, 0); //用四边形进行轮廓拟合
if (cvArcLength(cont2)>30 && fabs(cvContourArea(cont2))>200)
{
cvDrawContours(pFrame, cont2, CV_RGB(255, 0, 0), CV_RGB(255, 0, 0), 0, 1, 8, cvPoint(0, 0)); //画出轮廓
CvRect rect = cvContourBoundingRect(cont2); //确定边框区域
cvRectangle(pFrame, cvPoint(rect.x, rect.y), cvPoint(rect.x + rect.width, rect.y + rect.height), color_tab[i], 1, 8, 0);
i++;
cvRectangle(Img, cvPoint(rect.x, rect.y), cvPoint(rect.x + rect.width, rect.y + rect.height), CV_RGB(255, 255, 255), 1, 8, 0);
}
}
if (cvWaitKey(fps) == 'p')
{
cvWaitKey(0);
}
cvReleaseMemStorage(&stor);
cvShowImage("video", pFrame);
cvShowImage("FG", Img);
}
cvReleaseBGStatModel(&bgModel);
cvReleaseCapture(&capture);
return 0;
}


  • 写回答

3条回答 默认 最新

  • nglnc_0629 2017-12-21 02:48
    关注

    是否可以用cvShowImage?哪位能帮忙改一下,谢谢

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮