閱讀273 返回首頁    go 阿裏雲 go 技術社區[雲棲]


視頻前景提取 (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

  上一篇:go Spring4.0支持Groovy配置
  下一篇:go linux zip壓縮和解壓的各種操控