多线程问题 opencv打开一个视频。。。
菜豆豆 2015-08-15 06:21:01 想让滚动条跟着视频帧来变化,我这样做合理吗!?程序一直闪退,求解决方法
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <cv.h>
#include <windows.h>
#include <iostream>
using namespace std;
using namespace cv;
int g_slider_position = 0;
CvCapture *g_capture = NULL;
static int g_frame_count = 0;
HANDLE mutex;
DWORD WINAPI funproc(LPVOID LP);
void onTrackbarSlide(int pos)
{
g_frame_count = pos;
cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);
}
int main()
{
/************************************************************************/
/* 滚动条控制视频播放进度 */
/************************************************************************/
mutex = CreateMutex(NULL,FALSE,"");
cvNamedWindow("aviControl");
g_capture = cvCreateFileCapture("C:\\Users\\Public\\Videos\\Sample Videos\\A.avi");
int frame = (int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
HANDLE hand = CreateThread(NULL,0,funproc,NULL,0,NULL);
CloseHandle(hand);
if (frame != 0)
{
cvCreateTrackbar("pos","aviControl",&g_slider_position,frame,onTrackbarSlide);
}
IplImage *frames;
while (1)
{
frames = cvQueryFrame(g_capture);
WaitForSingleObject(mutex,INFINITE);
g_frame_count++;
ReleaseMutex(mutex);
if (!frames)
break;
cvShowImage("aviControl",frames);
char c = cvWaitKey(33);
if (c==27)
{
break;
}
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("aviControl");
return 0;
}
DWORD WINAPI funproc(LPVOID LP)
{
WaitForSingleObject(mutex,INFINITE);
onTrackbarSlide(g_frame_count);
ReleaseMutex(mutex);
cout<<g_frame_count<<endl;
return 0;
}