青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

嘗試 OpenCV 攝像頭 與 Windows 消息機制


    OpenCV 的 highgui 提供了簡單的界面,然而在 Windows 下,它并未將消息機制封裝的足夠好,在使用的時候,若不考慮到消息機制,很容易使界面死掉,同時 OpenCV 本身的運轉也會出問題。


    Windows 下,界面的正常運作需要大量的消息傳遞與處理,然而 OpenCV 的函數,幾乎都與消息無關,目前我只知道 cvWaitKey() 會接收并轉發本線程的消息(恕我無知),但只僅限于被調用后的等待時間內,所以并不能完全保證消息機制的正常運作。程序至少需要考慮到主動接收與轉發消息,以確保界面的正常運作。(也許這可以解釋,為什么許多示例程序中都調用了 cvWaitKey() 函數。)


    Windows 下的消息是線程相關的,啟動新線程又會引出更多的問題。


    下面程序從攝像頭獲取輸入,并在窗口中顯示。三個窗口使用一個線程。


    我嘗試過創建新線程,在新線程中使用 highgui 創建窗口,顯示圖像,然而,窗口的大小正確,卻顯示一片灰色(求指教!!)。

  

 

 

 附源代碼:
由于線程關系,我使用了最樸素的 Win32 API 。
OpenCV 2.1 + VS2010

  1#include "resource.h"
  2#include <Windows.h>
  3#include <highgui.h>
  4
  5
  6#ifdef  _DEBUG
  7/* debug */
  8
  9#pragma comment( lib, "cv210d.lib" )
 10#pragma comment( lib, "cvaux210d.lib" )
 11#pragma comment( lib, "cxcore210d.lib" )
 12#pragma comment( lib, "cxts210d.lib" )
 13#pragma comment( lib, "highgui210d.lib" )
 14#pragma comment( lib, "ml210d.lib" )
 15#pragma comment( lib, "opencv_ffmpeg210d.lib" )
 16
 17
 18#else
 19/* release */
 20
 21#pragma comment( lib, "cv210.lib" )
 22#pragma comment( lib, "cvaux210.lib" )
 23#pragma comment( lib, "cxcore210.lib" )
 24#pragma comment( lib, "cxts210.lib" )
 25#pragma comment( lib, "highgui210.lib" )
 26#pragma comment( lib, "ml210.lib" )
 27#pragma comment( lib, "opencv_ffmpeg210.lib" )
 28
 29
 30#endif
 31
 32
 33HWND  ghDlg  = NULL;
 34INT   gleft  = 0;
 35INT   gright = 0;
 36BOOL  gexit  = FALSE;
 37
 38
 39void DealAllMsg() {
 40        MSG msg;
 41        while ( ::PeekMessage( &msg, NULL, 00, PM_REMOVE ) ) {
 42                if ( ::IsWindow(ghDlg) && ::IsDialogMessage(ghDlg,&msg) ) {
 43                        continue;
 44                }

 45                ::TranslateMessage( &msg );
 46                ::DispatchMessage( &msg );
 47        }

 48}

 49
 50
 51void DelayTime( DWORD delay ) {
 52        DWORD start = ::GetTickCount();
 53        do {
 54                ::DealAllMsg();
 55                ::Sleep( 2 );
 56        }
 while ( (! gexit) && (::GetTickCount() - start < delay) );
 57}

 58
 59
 60INT_PTR  CALLBACK DlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
 61        switch ( uMsg ) {
 62        case WM_INITDIALOG : 
 63                ::CheckRadioButton( hDlg, IDC_RADIO1, IDC_RADIO3, IDC_RADIO1+gleft  );
 64                ::CheckRadioButton( hDlg, IDC_RADIO4, IDC_RADIO6, IDC_RADIO4+gright );
 65                return 1;
 66
 67        case WM_COMMAND : 
 68                switch ( LOWORD(wParam) ) {
 69                case IDC_RADIO1 : 
 70                case IDC_RADIO2 : 
 71                case IDC_RADIO3 : 
 72                        gleft = LOWORD(wParam) - IDC_RADIO1;
 73                        ::CheckRadioButton( hDlg, IDC_RADIO1, IDC_RADIO3, IDC_RADIO1+gleft );
 74                        return 1;
 75                case IDC_RADIO4 : 
 76                case IDC_RADIO5 : 
 77                case IDC_RADIO6 : 
 78                        gright = LOWORD(wParam) - IDC_RADIO4;
 79                        ::CheckRadioButton( hDlg, IDC_RADIO4, IDC_RADIO6, IDC_RADIO4+gright );
 80                        return 1;
 81                case IDCANCEL : 
 82                        gexit = TRUE;
 83                        return 1;
 84                }

 85                break;
 86        }

 87        return 0;
 88}

 89
 90
 91INT  WINAPI  WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR szCmd, INT nShow ) {
 92        char  *nameleft  = "左窗口";
 93        char  *nameright = "右窗口";
 94        CvCapture *cap = NULL;
 95        IplImage  *imgleft = NULL, *imgright = NULL;
 96        int i;
 97
 98        cap = ::cvCreateCameraCapture( -1 );
 99        ::DealAllMsg();
100        if ( NULL == cap ) {
101                ::MessageBox( NULL, TEXT("攝像頭錯誤"), TEXT("錯誤"), MB_ICONERROR | MB_OK );
102                return 0;
103        }

104
105        ::cvNamedWindow( nameleft );
106        ::DealAllMsg();
107        ::cvNamedWindow( nameright );
108        ::DealAllMsg();
109
110        ghDlg = ::CreateDialogParam( hInst, MAKEINTRESOURCE(IDD_GARAGE_DIALOG), NULL, DlgProc, 0 );
111        ::ShowWindow( ghDlg, SW_SHOW );
112        ::DealAllMsg();
113
114        for ( ; ; ) {
115                for ( i = 0; i < 1++i ) {
116                        imgleft = ::cvQueryFrame( cap );
117                        ::DealAllMsg();
118                        if ( NULL == imgleft ) {
119                                break;
120                        }

121                }

122                if ( NULL == imgleft ) {
123                        break;
124                }

125
126                switch ( gleft ) {
127                case 0 : 
128                        ::cvShowImage( nameleft, imgleft );
129                        break;
130                case 1 : 
131                        break;
132                case 2 : 
133                        ::cvDestroyWindow( nameleft );
134                        break;
135                }

136                ::DealAllMsg();
137                if ( gexit ) {
138                        break;
139                }

140
141                imgright = imgleft; // imgright = func( imgleft );
142                ::DealAllMsg();
143
144                switch ( gright ) {
145                case 0 : 
146                        ::cvShowImage( nameright, imgright );
147                        break;
148                case 1 : 
149                        break;
150                case 2 : 
151                        ::cvDestroyWindow( nameright );
152                        break;
153                }

154                ::DealAllMsg();
155                if ( gexit ) {
156                        break;
157                }

158        }

159
160        ::DestroyWindow( ghDlg );
161
162        ::cvDestroyWindow( nameright );
163        ::cvDestroyWindow( nameleft );
164
165        ::cvReleaseCapture( &cap );
166
167        return 0;
168}

169

 

 1//{{NO_DEPENDENCIES}}
 2// Microsoft Visual C++ generated include file.
 3// Used by Garage.rc
 4//
 5#define IDD_GARAGE_DIALOG               101
 6#define IDC_RADIO1                      1001
 7#define IDC_RADIO2                      1002
 8#define IDC_RADIO3                      1003
 9#define IDC_RADIO4                      1004
10#define IDC_RADIO5                      1005
11#define IDC_RADIO6                      1006
12
13
14// Next default values for new objects
15// 
16#ifdef APSTUDIO_INVOKED
17#ifndef APSTUDIO_READONLY_SYMBOLS
18#define _APS_NEXT_RESOURCE_VALUE        102
19#define _APS_NEXT_COMMAND_VALUE         40001
20#define _APS_NEXT_CONTROL_VALUE         1007
21#define _APS_NEXT_SYMED_VALUE           101
22#endif
23#endif
24

 

  1// Microsoft Visual C++ generated resource script.
  2//
  3#include "resource.h"
  4
  5#define APSTUDIO_READONLY_SYMBOLS
  6/////////////////////////////////////////////////////////////////////////////
  7//
  8// Generated from the TEXTINCLUDE 2 resource.
  9//
 10#include "afxres.h"
 11
 12/////////////////////////////////////////////////////////////////////////////
 13#undef APSTUDIO_READONLY_SYMBOLS
 14
 15/////////////////////////////////////////////////////////////////////////////
 16// Chinese (Simplified, PRC) resources
 17
 18#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
 19LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
 20
 21#ifdef APSTUDIO_INVOKED
 22/////////////////////////////////////////////////////////////////////////////
 23//
 24// TEXTINCLUDE
 25//
 26
 271 TEXTINCLUDE 
 28BEGIN
 29    "resource.h\0"
 30END
 31
 322 TEXTINCLUDE 
 33BEGIN
 34    "#include ""afxres.h""\r\n"
 35    "\0"
 36END
 37
 383 TEXTINCLUDE 
 39BEGIN
 40    "\r\n"
 41    "\0"
 42END
 43
 44#endif    // APSTUDIO_INVOKED
 45
 46
 47/////////////////////////////////////////////////////////////////////////////
 48//
 49// Dialog
 50//
 51
 52IDD_GARAGE_DIALOG DIALOGEX 00266156
 53STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME
 54EXSTYLE WS_EX_APPWINDOW
 55CAPTION "OpenCV 攝像頭 - 嘗試"
 56FONT 8"MS Shell Dlg"000x1
 57BEGIN
 58    DEFPUSHBUTTON   "退出",IDCANCEL,209,135,50,14
 59    CONTROL         "播放",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,40,40,32,10
 60    CONTROL         "暫停",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,40,65,32,10
 61    CONTROL         "關閉",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,40,90,32,10
 62    CONTROL         "播放",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON | WS_GROUP,185,40,32,10
 63    CONTROL         "暫停",IDC_RADIO5,"Button",BS_AUTORADIOBUTTON,185,65,32,10
 64    CONTROL         "關閉",IDC_RADIO6,"Button",BS_AUTORADIOBUTTON,185,90,32,10
 65    GROUPBOX        "左窗口",IDC_STATIC,23,20,65,86
 66    GROUPBOX        "右窗口",IDC_STATIC,168,20,65,86
 67END
 68
 69
 70/////////////////////////////////////////////////////////////////////////////
 71//
 72// DESIGNINFO
 73//
 74
 75#ifdef APSTUDIO_INVOKED
 76GUIDELINES DESIGNINFO
 77BEGIN
 78    IDD_GARAGE_DIALOG, DIALOG
 79    BEGIN
 80        LEFTMARGIN, 7
 81        RIGHTMARGIN, 259
 82        TOPMARGIN, 7
 83        BOTTOMMARGIN, 149
 84    END
 85END
 86#endif    // APSTUDIO_INVOKED
 87
 88#endif    // Chinese (Simplified, PRC) resources
 89/////////////////////////////////////////////////////////////////////////////
 90
 91
 92
 93#ifndef APSTUDIO_INVOKED
 94/////////////////////////////////////////////////////////////////////////////
 95//
 96// Generated from the TEXTINCLUDE 3 resource.
 97//
 98
 99
100/////////////////////////////////////////////////////////////////////////////
101#endif    // not APSTUDIO_INVOKED
102
103



 

posted on 2011-11-06 17:59 coreBugZJ 閱讀(2235) 評論(0)  編輯 收藏 引用 所屬分類: VideoImage 、Windows

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            av成人免费在线| 久久不射中文字幕| 久久精品综合网| 欧美伊人久久| 久久久久久网| 欧美www在线| 日韩视频一区二区三区在线播放免费观看 | 久久国产婷婷国产香蕉| 一区二区日韩免费看| 亚洲一区在线免费| 翔田千里一区二区| 欧美精品在线免费播放| 久久国产精品一区二区三区四区 | 99re6这里只有精品| 一本色道久久99精品综合| 一区二区欧美日韩视频| 亚洲视频欧美视频| 久久久久久69| 亚洲黄色一区| 日韩视频永久免费观看| 欧美一级在线播放| 一区二区三区欧美在线| 久久久久99| 一本色道久久加勒比88综合| 欧美一区二区三区视频免费播放 | 欧美日韩国产123区| 国产欧美日本| 亚洲婷婷在线| 欧美福利小视频| 欧美中文字幕| 国产精品久久久久久久久久久久久 | 亚洲福利视频二区| 亚洲性视频网址| 欧美日韩成人综合| 亚洲黑丝在线| 久久日韩精品| 久久久综合网| 91久久国产自产拍夜夜嗨| 亚洲午夜精品久久久久久浪潮| 国产一区在线播放| 亚洲欧美伊人| 午夜视黄欧洲亚洲| 国产精品午夜在线观看| 中国av一区| 欧美在线三级| 美脚丝袜一区二区三区在线观看| 亚洲激情校园春色| 一本色道久久综合亚洲二区三区| 国产精品美女久久久久久2018 | 美女网站久久| 亚洲国产欧美国产综合一区| 亚洲欧美在线播放| 日韩天天综合| 久久久免费精品视频| 午夜亚洲影视| 欧美激情在线观看| 久久综合国产精品| 国产精品久久久久久久久久尿| 欧美高清影院| 尤物精品在线| 久久成人国产| 久久久久这里只有精品| 国产日韩欧美在线播放不卡| 亚洲第一精品福利| 国内揄拍国内精品久久| 午夜精品区一区二区三| 亚洲欧洲日韩综合二区| 国产精品自拍一区| 亚洲欧美日本另类| 亚洲精品女av网站| 欧美一区视频| 久久成人精品一区二区三区| 久久综合电影一区| 亚洲欧美日韩精品久久久久 | 亚洲欧美综合另类中字| 久久电影一区| 亚洲精品在线三区| 国产在线拍偷自揄拍精品| 蜜桃av噜噜一区二区三区| 亚洲图片在区色| 亚洲黄网站在线观看| 久久久久免费视频| 亚洲一区在线直播| 亚洲免费人成在线视频观看| 亚洲欧美日韩国产一区二区三区| 亚洲国产专区校园欧美| 一本色道久久综合亚洲91| 亚洲日本在线观看| 国产精品日韩久久久| 欧美有码视频| 欧美日韩一区在线观看视频| 亚洲成人在线免费| 国产三级欧美三级| 久久久久久久久久久一区| 欧美三级第一页| 欧美国产精品专区| 欧美系列一区| 欧美a级片网站| 欧美一区观看| 亚洲国产你懂的| 欧美日韩在线视频首页| 欧美福利在线| 国产精品va在线| 亚洲二区在线观看| 国产精品美女久久久久av超清 | 在线亚洲自拍| 久久精品视频在线看| 欧美成人性生活| 免费在线欧美黄色| 久久av红桃一区二区小说| 最新中文字幕一区二区三区| 午夜免费日韩视频| 一本久久a久久免费精品不卡| 午夜精品久久| 午夜欧美精品| 亚洲人成毛片在线播放| 先锋影音久久久| 中国女人久久久| 玖玖综合伊人| 鲁鲁狠狠狠7777一区二区| 欧美日韩一区在线视频| 亚洲福利视频一区| 好看的av在线不卡观看| 亚洲免费在线视频一区 二区| 夜夜嗨一区二区| 欧美aⅴ99久久黑人专区| 久久影院午夜论| 国产综合激情| 欧美一区在线直播| 久久久www成人免费精品| 国产精品美女久久久久久2018| 亚洲激情影视| 亚洲国产精品电影在线观看| 久久女同精品一区二区| 欧美调教视频| 免费不卡在线视频| 国产欧美一区二区精品性| 亚洲小少妇裸体bbw| 亚洲一区成人| 国产精品va在线播放| 一本色道久久综合精品竹菊| 亚洲无吗在线| 国产精品手机在线| 亚洲一区二区在线观看视频| 亚洲在线观看免费| 国产伦精品一区二区三区视频黑人| 亚洲制服av| 久久蜜桃精品| 精品动漫3d一区二区三区免费版 | 在线视频中文亚洲| 亚洲综合99| 国产日韩欧美在线视频观看| 久久精品国产亚洲一区二区| 蜜臀久久久99精品久久久久久| 在线成人欧美| 欧美激情视频在线播放| 亚洲毛片一区二区| 欧美一区二区三区在线免费观看| 国产日韩在线看片| 久久午夜国产精品| 亚洲精品免费观看| 欧美在线free| 亚洲欧洲日产国产网站| 欧美视频不卡中文| 欧美一区二区视频97| 欧美激情一区二区三区在线| 亚洲午夜高清视频| 国产色综合天天综合网| 久久男人av资源网站| 亚洲精品麻豆| 久久嫩草精品久久久久| 亚洲精一区二区三区| 国产麻豆综合| 欧美成人午夜免费视在线看片 | 欧美韩日一区| 亚洲自拍16p| 在线精品福利| 国产精品欧美一区喷水| 美女网站在线免费欧美精品| 亚洲一区二区三区中文字幕在线 | 国产精品久久九九| 久久综合亚洲社区| 亚洲免费中文| 日韩一区二区高清| 欧美成人亚洲成人日韩成人| 亚洲女人av| 日韩视频一区二区| 狠狠色丁香久久婷婷综合_中| 欧美深夜影院| 欧美日本亚洲| 久久视频在线看| 一区二区日韩欧美| 亚洲国产精品黑人久久久| 久久精品91久久香蕉加勒比| 一区二区三区四区蜜桃| 久久精品日产第一区二区| 亚洲电影在线免费观看| 国内精品视频一区| 久久久久久夜| 欧美日韩国产91|