问题描述
- 关于cvWaitKey的工作机理;图像的闪烁问题;CPU下降措施
-
void IVE2OPENCV_Showimage_Grey(IVE_SRC_IMAGE_S *ive_img) { HI_U32 return_flag=0; IplImage* cv_img=NULL; cv_img=cvCreateImage(cvSize(ive_img->u16Width,ive_img->u16Height),8,1); cv_img->imageData=(char*)ive_img->pu8VirAddr[0]; cvNamedWindow("bendan"); cvShowImage("bendan",cv_img); cvWaitKey(50);//?这个函数的作用 cvDestroyWindow("bendan"); cvReleaseImage(&cv_img); cv_img=NULL; }
问题:
1.cvWaitKey的工作机理,是按键触发么?按键触发之前,CPU空闲么?
2.cvWaitKey(int t );当t>0时,是不是等待多少毫秒后在工作?
3.上述代码中,我想显示图片为什么一直闪烁,我没有不是应该隔50毫秒,在更新么?
4.为了进一步移植到下位机,老大要减低程序执行的CPU,目前是25%,但是当我在显示图像中增加cvWaitKey(50)后,cpu的占有率明显下降,是12%。这是什么原理,增加cvWaitKey(50)后,会影响循环程序单次执行的时间么?(主要是我自己测试了一下,处理时间没有增加,竟然有些下降?什么原因)
解决方案
http://blog.csdn.net/longxiaoshi/article/details/7390252
解决方案二:
问题1:按一定间隔检测键盘的输入(适用于循环体中);
原文解释:
int key;
key=cvWaitKey(10);//wait 10ms for input
解决方案三:
http://wiki.opencv.org.cn/index.php/HighGUI%e7%ae%80%e5%8d%95%e5%9b%be%e5%bd%a2%e7%95%8c%e9%9d%a2#cvWaitKey
delay 延迟的毫秒数。
函数cvWaitKey无限制的等待按键事件(delay<=0时);或者延迟"delay"毫秒。返回值为被按键的值,如果超过指定时间则返回-1。
注释:这个函数是HighGUI中唯一能够获取和操作事件的函数,所以在一般的事件处理中,它需要周期地被调用,除非HighGUI被用在某些能够处理事件的环境中。
译者注:比如在MFC环境下,这个函数不起作用。
解决方案四:
明白了,类似于sleep()函数,用于挂起进程,给CPU休息时间,否则就是死循环!
至于实时性的问题,需要配置sleep函数,达到实时性的要求!
哈哈,还是老大给力!