执行时报错:Input window has non-positive size in function cvCamShift.
源程序使用的是OpenCV官网上面提供的 设定跟踪目标图片的改进camshift例子 ,事实上只需要里面的ShadowTrack.cpp 就可以。
cvCamShift函数的参数Illegal的问题一:
我想实现的效果是,Adaboost检测到的人脸图像后,用Camshift算法进行跟踪人脸。编写了一个Detect类,主要任务是人脸检测,但是在程序运行时总是出现cvCamShift函数不合法的情况,逐步执行,发现这样一个问题,就是在执行几次cvCamShift后cvCamShift的参数 track_window 会变成(0,0,0,0),这就导致下一次的跟踪失败。这个问题我是百思不得其解。
在OpenCV官网上提供的一个运动目标自动跟踪的程序也存在跟踪不到目标的情况,但是也没有出现下一次跟踪cvCamShift函数的参数非法的问题。这个问题纠缠我好久,后来无意在自己定义的Detect类中发现,使用cvShowImage函数将图片显示在一个我没有定义的窗口中。将类中的cvShowImage函数删除或者cvNamedWindow一下,程序便可以正常运行。
后来重新测试了cvShowImage函数,这个函数确实可以在窗口没有定义的情况下,将图像显示出来。以后在使用这个函数时候要注意了,说不清楚会出现什么样的情况。
cvCamShift函数的参数Illegal的问题二:
今天将人脸跟踪的程序放在Linux环境下执行,还是与问题一中一样的情况出现,这次的问题不是处在showimage函数使用没有定义的窗口,而是smin这个变量的定义问题。折腾了好久,发现smin在初始化时,如果定义的数字过大,会导致cvCamshift参数非法的情况。具体原因还不清楚,有待进一步研究。