对两个不同的图片(取自于视频)进行差分,然后二值化,只不过添加进了一个滑动条,可以更直观的看到变化。
//显示图像文件 #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; }