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

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 閱讀(2233) 評論(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成人免费在线观看| 亚洲视频欧美在线| 亚洲免费视频观看| 久久亚洲欧洲| 亚洲电影成人| 欧美激情精品久久久久久变态 | 国产视频在线观看一区 | 亚洲免费观看在线视频| 在线亚洲自拍| 久久久97精品| 亚洲第一网站| 亚洲午夜黄色| 久久久久综合网| 欧美精品电影| 国产欧美日韩高清| 亚洲人成网站777色婷婷| 亚洲影院高清在线| 免费成人激情视频| 中国成人黄色视屏| 美女精品一区| 国产精品三区www17con| 亚洲国产欧美不卡在线观看| 亚洲欧美国产77777| 欧美成人在线免费视频| 一区二区三区福利| 你懂的视频一区二区| 国产伦精品一区二区三区| 亚洲美女黄网| 鲁大师成人一区二区三区| 一二三区精品| 欧美成人精品一区二区| 国产精品影音先锋| 中文av一区特黄| 亚洲国产精品成人va在线观看| 亚洲欧美日韩区| 欧美日韩国产丝袜另类| 亚洲国产成人高清精品| 久久久久久亚洲精品杨幂换脸| 日韩午夜一区| 你懂的一区二区| 亚洲一级在线观看| 免费看av成人| 在线不卡中文字幕| 久久国产高清| 亚洲一区在线观看免费观看电影高清| 欧美成人一品| 在线免费观看日韩欧美| 久久久精品免费视频| 亚洲一区二区黄| 欧美午夜精品理论片a级按摩 | 亚洲视频一二| 亚洲黄页一区| 欧美xxx成人| 亚洲黄色影片| 欧美成人视屏| 免费试看一区| 亚洲精品一级| 亚洲精品在线电影| 欧美日韩亚洲视频| 亚洲视频一区二区| 亚洲午夜精品17c| 国产精品久久久久久亚洲毛片| 亚洲欧美99| 亚洲欧美日韩国产| 国产一区二区久久久| 久久国产日本精品| 久久av二区| 亚洲电影成人| 亚洲乱码久久| 国产精品女人久久久久久| 欧美在线短视频| 久久精品一区二区三区四区| 加勒比av一区二区| 亚洲国产老妈| 欧美性理论片在线观看片免费| 亚洲男人的天堂在线观看| 亚洲永久精品大片| 国内一区二区三区在线视频| 欧美大片免费观看| 欧美日韩精品一二三区| 欧美亚洲三级| 久久国产精品久久久久久久久久 | 久久综合成人精品亚洲另类欧美| 久久爱www.| 亚洲人成毛片在线播放| 这里只有精品视频| 韩国三级电影一区二区| 91久久精品视频| 国产精自产拍久久久久久| 女生裸体视频一区二区三区 | 国产亚洲成av人在线观看导航 | 亚洲精品国产品国语在线app | 蜜臀久久久99精品久久久久久| 在线精品福利| 亚洲国产日韩综合一区| 国产精品久久毛片a| 女仆av观看一区| 国产精品一区二区在线观看网站| 女人色偷偷aa久久天堂| 国产精品私房写真福利视频| 欧美成人在线网站| 国产视频一区二区在线观看 | 久久先锋影音av| 亚洲午夜女主播在线直播| 午夜性色一区二区三区免费视频 | 久久久久久久一区二区三区| 欧美高清hd18日本| 久久久久欧美精品| 国产精品入口尤物| 99视频热这里只有精品免费| 在线成人激情| 欧美在线观看一区二区| 亚洲欧美日本伦理| 欧美激情综合色| 欧美国产1区2区| 国内激情久久| 校园春色国产精品| 午夜久久99| 国产精品久久久亚洲一区| 亚洲精品国产精品国自产观看浪潮 | 欧美日韩第一页| 欧美成人伊人久久综合网| 国外成人性视频| 欧美一区二粉嫩精品国产一线天| 国产精品99久久久久久有的能看 | 久久在线视频在线| 国产日韩在线视频| 亚洲欧美成人一区二区三区| 亚洲一区欧美二区| 国产精品福利av| 艳妇臀荡乳欲伦亚洲一区| 一本久道久久久| 欧美日韩精品是欧美日韩精品| 亚洲激情在线| 一本色道久久综合亚洲精品高清| 欧美福利一区二区| 亚洲精品午夜精品| 亚洲一区三区电影在线观看| 欧美日精品一区视频| 99www免费人成精品| 亚洲——在线| 国产欧美日韩亚洲一区二区三区| 午夜精品一区二区三区在线播放 | 欧美亚洲尤物久久| 国产无遮挡一区二区三区毛片日本| 久久婷婷色综合| 女仆av观看一区| 亚洲国产精品视频一区| 99视频精品在线| 国产精品h在线观看| 午夜精品福利在线| 欧美freesex交免费视频| 亚洲老司机av| 国产精品日韩专区| 卡一卡二国产精品| aa亚洲婷婷| 久久人体大胆视频| 日韩视频精品| 国产欧美精品一区aⅴ影院| 久久久久久免费| 亚洲精品你懂的| 亚洲一区二区三区激情| 韩国av一区二区三区| 欧美国产日韩在线| 亚洲欧美日韩综合一区| 欧美高清免费| 午夜精品视频在线| 91久久中文字幕| 国产精品久久久久久久第一福利| 欧美亚洲三级| 亚洲国产另类久久精品| 欧美一区二区三区免费视| 亚洲第一色在线| 国产精品乱码人人做人人爱| 久久天堂精品| 亚洲一级在线观看| 亚洲欧洲另类国产综合| 久久久久久久久一区二区| 亚洲久色影视| 国产午夜精品全部视频在线播放 | 91久久精品视频| 国产乱码精品一区二区三区不卡 | 免费观看成人| 香蕉亚洲视频| 一本一本久久a久久精品牛牛影视| 老司机成人网| 午夜伦欧美伦电影理论片| 亚洲卡通欧美制服中文| 亚洲福利视频网| 国产一区二区三区在线免费观看| 欧美日韩 国产精品| 久久久精品性| 久久国产精品色婷婷|