首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

《学习OpenCV(中文版)》例2-3,该如何解决

2012-03-24 
《学习OpenCV(中文版)》例2-3代码如下:C/C++ code#include highgui.hint g_sliderPosition 0 // start

《学习OpenCV(中文版)》例2-3
代码如下:

C/C++ code
#include <highgui.h>int g_sliderPosition = 0; // start positionCvCapture* g_capture = NULL;void OnTrackbarSlide (int pos){    cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos);}int main (int args, char** argv){    cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);    if (args == 2 && (g_capture = cvCreateFileCapture(argv[1])) != NULL) {        int frameNum = (int)cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT);        if (frameNum)            cvCreateTrackbar("position", "Example3", &g_sliderPosition, frameNum, OnTrackbarSlide);        IplImage* frame;        while (1) {            frame = cvQueryFrame(g_capture);            if (frame == NULL)                break;            cvShowImage("Example3", frame);            char c = cvWaitKey(33); // wait for 33ns            if (c == 27) // Esc                break;        }        cvReleaseCapture(&g_capture);        cvDestroyWindow("Example3");        return 0;    }    else        return -1;}

运行时没有问题,但是如果将滚动条拖到接近末尾的地方(只是接近末尾,还没有达到末尾),建立的播放窗口就关闭了,然后在控制台窗口中有如下提示:
HIGHGUI ERROR: AVI: could not seek to position 0.003
请问这是怎么一回事?为什么会有这个ERROR,它在什么情况下产生?而且为什么是0.003(有时候是出现多条提示,但是都是0.003)?希望有朋友可以具体解释其原因,谢谢了~

[解决办法]
有些时候与软件无关,和你要播放的源文件有关系的。
[解决办法]
探讨

另外,还想问一下,书上说这里有个“回调函数”,指的是OnTrackbarSlide()这个函数。那么什么是“回调函数”呢?查到回调函数似乎是指用指向函数的指针调用的函数,但是这里表面上并没有出现指向函数的指针。
还有就是,为什么拖动进度条的时候,播放进度会随之变化呢?在while循环内并没有任何涉及到进度条的代码啊。进度条的代码都在while循环之前,那么当程序运行至while循环内之后,程序……

[解决办法]
探讨

尝试去进行调试,但是出现错误:
“无法启动此程序,因为计算机中丢失opencv_highgui231d.dll。尝试重新安装该程序以解决此问题。”
通过命令行窗口运行则正常。这是为什么?

[解决办法]
回调函数,,记得貌似在linux系统编程中有类似的,类似于硬件中断,
函数名可做为函数指针使用
[解决办法]
回调函数是在这一句里调用的,cvCreateTrackbar("position", "Example3", &g_sliderPosition, frameNum, OnTrackbarSlide);
最后一个参数即回调函数的名字即指针

热点排行