cvWaitKey(k)的简介

发布时间:2024-11-21 23:22

在个人简介部分简洁介绍自己 #生活技巧# #工作学习技巧# #个人简历撰写技巧#

 


     作者本人的开发环境为VS的MFC构架,结合OpenCV1.0进行图像的处理。可能很多像作者本人一样的初始开发程序员都会用到cvWaitKey(),但是对cvWaitKey()的理解一知半解,在具体开发中会由此产生一些困惑。在查询了一些资料后,将资料整理汇总如下:
    参考的网址如下:
      http://zhidao.baidu.com/question/113288896
   http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=3324&start=0
   http://www.google.com.hk/search?hl=zh-CN&inlang=zh-CN&newwindow=1&safe=strict&client=aff-cs-360se&hs=kLG&q=%E4%B8%80%E7%A7%92%E5%BA%94%E8%AF%A5%E8%BE%93%E5%87%BA%E5%A4%9A%E5%B0%91%E5%B8%A7%EF%BC%9F&oq=%E4%B8%80%E7%A7%92%E5%BA%94%E8%AF%A5%E8%BE%93%E5%87%BA%E5%A4%9A%E5%B0%91%E5%B8%A7%EF%BC%9F&aq=f&aqi=&aql=&gs_sm=e&gs_upl=67155l89678l0l89948l15l14l0l3l0l2l286l1318l1.4.3l8l0

    首先,在cvWaitKey(k)中,k的单位为毫秒,1000毫秒等于1秒,同时,根据资料的说明,在显示图像的时候,每秒显示27、28帧的时候,我们看到的视频是流畅的。根据作者本人的实验和观察,如果每秒播放25帧视频,看到的视频仍然是流畅的。同时采取25帧的话,k=1000/25=40。即,没处理完一帧后,程序会等待40毫秒才会读取下一帧。在资料中,说明在mfc中cvWaitKey()中的k并无用处,但是,作者本人的程序中,k是正常的。虽然不甚明白原理,但是如果大家遇到同样的问题,可以如此尝试。
    关于cvWaitKey()的介绍,引用OpenCV中文论坛的解释:

    window平台下,cvWaitKey的源码:

CV_IMPL int

cvWaitKey( int delay )

{

int time0 = GetTickCount();

for(;;)

{

CvWindow* window;

MSG message;

int is_processed = 0;

if( (delay > 0 && abs((int)(GetTickCount() - time0)) >= delay) || hg_windows == 0 )

return -1;

if( delay <= 0 )

GetMessage(&message, 0, 0, 0);

else if( PeekMessage(&message, 0, 0, 0, PM_REMOVE) == FALSE )

{

Sleep(1);

continue;

}

for( window = hg_windows; window != 0 && is_processed == 0; window = window->next )

{

if( window->hwnd == message.hwnd || window->frame == message.hwnd )

{

is_processed = 1;

switch(message.message)

{

case WM_DESTROY:

case WM_CHAR:

DispatchMessage(&message);

return (int)message.wParam;

case WM_KEYDOWN:

TranslateMessage(&message);

default:

DispatchMessage(&message);

is_processed = 1;

break;

}

}

}

if( !is_processed )

{

TranslateMessage(&message);

DispatchMessage(&message);

}

}

}

    可见cvWaitKey的内部除了sleep休眠之外, 还有重要的Message处理, 比如键盘消息, 字符等....这个消息处理结构对于写过Windows程序的人来说应该是很熟悉的.

    你可以做个极端一点的假设:

    如果没有cvWaitKey的话, 那么循环里面的每个指令执行时间为0.0000000001s,总之趋近于0.那么capture可能有10000帧图像, 那么10000帧图像也之需要0.000001s就播放完了, 结果你还没看到画面,就已经黑屏了 ....

    以上为作者对三个网页内容的总结整理。希望能帮到大家

网址:cvWaitKey(k)的简介 https://www.yuejiaxmz.com/news/view/181825

相关内容

x*y=k
小K多功能购物助手
某次考试共有20题。计分标准是:做对第k题得k分(k=1,2,3,…,20)...
Partyhouse派对屋智能影K,与生活协同升级!
Partyhouse派对屋:智能影K在智能家居市场中的重要性
愉快的周五又到了,与好友的K歌快乐时光~
全程“0焦虑” UNI-K iDD让自驾旅行更省心
“后浪”必买清单又多一项 北鼎养生壶新品Mini K趣味面世
Partyhouse派对屋影K一体智能家庭娱乐音响系统:从单品到智能生活
机械设计中K=1的曲柄摇杆机构

随便看看