视频前景提取 (I)【滑动条版本】
对两个不同的图片(取自于视频)进行差分,然后二值化,只不过添加进了一个滑动条,可以更直观的看到变化。
//显示图像文件
#include <opencv2/opencv.hpp>
#include <stdio.h>
using namespace std;
//#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
IplImage *img3=NULL; //差分图
IplImage *img4=NULL; //二值图
void on_trackbar(int pos)
{
// 转为二值图
cvThreshold(img3, img4, pos, 255, CV_THRESH_BINARY);
// 显示二值图
cvShowImage("二值图", img4);
}
int main()
{
//从文件中读取图像
IplImage *img1 = cvLoadImage("007.jpg", CV_LOAD_IMAGE_UNCHANGED);
IplImage *img2 = cvLoadImage("009.jpg", CV_LOAD_IMAGE_UNCHANGED);
img3=cvCreateImage(cvGetSize(img1),img1->depth,img1->nChannels);
cvAbsDiff(img1,img2,img3);
// 对得到的前景进行阈值选取,去掉伪前景
img4=cvCreateImage(cvGetSize(img1),img1->depth,img1->nChannels);
//在指定窗口中显示图像
cvShowImage("原图1", img1);
cvShowImage("原图2", img2);
cvShowImage("差分", img3);
// 创建二值图窗口
cvNamedWindow("二值图", CV_WINDOW_AUTOSIZE);
// 滑动条
int nThreshold = 0;
cvCreateTrackbar("二值图滑动条", "二值图", &nThreshold, 254, on_trackbar);
on_trackbar(1);
//等待按键事件
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&img1);
cvReleaseImage(&img2);
cvReleaseImage(&img3);
cvReleaseImage(&img4);
return 0;
}

最后更新:2017-04-03 05:39:30