用opencv读取视频加入滚动条并进行canny边缘检测以及平滑处理
#include"highgui.h"
#include"cv.h"using namespace cv;
int g_slider_position=0;
CvCapture* g_capture=NULL;
void onTrackbarSlider(int pos)
{
cvSetCaptureProperty(
g_capture,
CV_CAP_PROP_POS_FRAMES,
pos);
}
void Example(String Filename)
{
cvNamedWindow("Example1 in");
cvNamedWindow("Example1 out");
g_capture=cvCaptureFromFile("F://FFOutput//02.avi");
int frames=(int)cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT);
if(frames!=0){
cvCreateTrackbar(
"position",
"Example1 in",
&g_slider_position,
frames,
onTrackbarSlider);}
IplImage* in;
//IplImage* out=0;
while(1)
{
in=cvQueryFrame(g_capture);
g_slider_position=(int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES);//这两段实现了滚动条随着视频播放自动移动
cvSetTrackbarPos("position","Example1 in",g_slider_position);
if(!in) break;
IplImage* out=cvCreateImage(
cvGetSize(in),
IPL_DEPTH_8U,
1);
cvCanny(in,out,10,100,3);
//cvSmooth(in,out,CV_GAUSSIAN,3,3);
cvShowImage("Example1 in",in);
cvShowImage("Example1 out",out);
char c=cvWaitKey(33);
if(c==27)
break;
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("Example1 in");
cvDestroyWindow("Example1 out");
}
int main(int argc,char* argv[])
{
Example("avi");
//onTrackbarSlider(20);
return 0;
}
运行结果: