Znn3bq.jpeg
ÉÇÍ·´óѧº£Ñó¿ÆÑ§½ÓÊܵ÷¼Á
²é¿´: 2806  |  »Ø¸´: 2

yadan33

гæ (³õÈëÎÄ̳)

[½»Á÷] opencvÖеÄÊó±êÏìÓ¦µÄº¯ÊýsetMouseCallback()

??????http://blog.csdn.net/fengbingchun/article/details/7768252

opencv?§Ö??????????????setMouseCallback(),???????????????
    c++: void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)
    winname:?????????
    onMouse:?????????????????????????????????????????????????????????? ????????????????void on_Mouse(int event, int x, int y, int flags, void* param);
    userdate??????????????????
   
     void on_Mouse(int event, int x, int y, int flags, void* param);
event?? CV_EVENT_*??????
x??y??????????????????????????????????????
flags??CV_EVENT_FLAG?????? param??????????????setMouseCallback??????????????
       Event????????????????????a,????????????,Event??????????????????onMouse(),?????????????????,flags??????????????,param?t????????xonMouse()?????ID,???GUI????????????ID???(cvGetWindowHandle()),???^?@???????o????,??????????ID?t????y????S?C?????ID,?????????????§á????????????
Event:
#define CV_EVENT_MOUSEMOVE 0                   ????
#define CV_EVENT_LBUTTONDOWN 1           ???I?c??
#define CV_EVENT_RBUTTONDOWN 2           ???I?c??
#define CV_EVENT_MBUTTONDOWN 3           ???I?c??
#define CV_EVENT_LBUTTONUP 4                 ???I???_
#define CV_EVENT_RBUTTONUP 5                 ???I???_
#define CV_EVENT_MBUTTONUP 6                 ???I???_
#define CV_EVENT_LBUTTONDBLCLK 7         ???I?p??
#define CV_EVENT_RBUTTONDBLCLK 8         ???I?p??
#define CV_EVENT_MBUTTONDBLCLK 9         ???I?p??
flags:
#define CV_EVENT_FLAG_LBUTTON 1           ???I???
#define CV_EVENT_FLAG_RBUTTON 2           ???I???
#define CV_EVENT_FLAG_MBUTTON 4           ???I???
#define CV_EVENT_FLAG_CTRLKEY 8     (8~15)??Ctrl???????
#define CV_EVENT_FLAG_SHIFTKEY 16   (16~31)??Shift???????
#define CV_EVENT_FLAG_ALTKEY 32       (32~39)??Alt???????

?????#define??OpenCV???§Ø??x?????,???????????r??,?????????,??????¨¹???????.???¦Å??Bmouse???P??|??.
»Ø¸´´ËÂ¥
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

yadan33

гæ (³õÈëÎÄ̳)

opencv±àд³ÌÐòÖУ¬ÓÃÊó±êÑ¡¶¨¾ØÐοò¾­³£Óõ½¡£±à³Ìʱ¿´Ëƺܼòµ¥µÄÂß¼­Ë¼Â·£¬Èç¹û¶ÔopencvÖеÄRect²»ÊǺÜÁ˽âµÄ»°£¬ÄÇʵÏÖµÄЧ¹û¾Í²»ÊÇÌØ±ðÀíÏ룬±ÈÈç˵ËäÈ»ÎÒÃÇϰ¹ßÐÔÓÃÊó±ê´Ó×óÉϵ½ÓÒÏÂÑ¡Ôñ£¬µ«ÊÇż¶ûÒ²»á´Ó×óϵ½ÓÒÉÏÑ¡ÔñµÈµÈ¡­¡­

¡¡¡¡¿ªÊ¼×Ô¼ºÊµÏÖÕâ¸ö¹¦Äܺ󣬷¢ÏÖдµÄ´úÂë±È½Ï·±Ëö£¬ifÓï¾äÌ«¶à¡£ºóÃæ¿´ÁËopencvµÄÀý³Ìºó£¬¸Ð¾õËüµÄ´úÂëЧÂʷdz£¸ß¡£ÏÂÃæ¾ÍÊÇÓÃÀ´Á·Ï°Ïµġ£

¡¡¡¡»·¾³£ºopencv2.3.1+vs2010

¡¡¡¡¹¦ÄÜ£º´ò¿ªÉãÏñÍ·£¬²¶×½ÊÓÆµÍ¼Ïñ£¬ÓÃÊó±êÑ¡¶¨ÊÓÆµÇøÓò(Ö§³Ö¸÷ÖÖÑ¡Ôñϰ¹ß)¡£

¡¡¡¡´úÂëºÍ×¢ÊÍÈçÏ£º

¸´ÖÆ´úÂë
1 #include "stdafx.h"
2 #include "opencv2/imgproc/imgproc.hpp"
3 #include <opencv2/highgui/highgui.hpp>
4 #include <opencv2/core/core.hpp>
5 #include <stdio.h>
6 #include <iostream>
7
8 using namespace cv;
9 using namespace std;
10 Rect select;
11 bool select_flag=false;
12 Point origin;
13 Mat frame;
14
15 /************************************************************************************************************************/
16 /****                    Èç¹û²ÉÓÃÕâ¸öonMouse()º¯ÊýµÄ»°£¬ÔòÖ»ÄÜ»­³ö´Ó×óÉϵ½ÓÒÏ£¬»òÕß´ÓÓÒϵ½×óÉϵľØÐοò                    ****/
17 /************************************************************************************************************************/
18 //void onMouse(int event,int x,int y,int,void*)
19 //{
20 //    if(event==CV_EVENT_LBUTTONDOWN)
21 //    {
22 //        select.x=x;
23 //        select.y=y;
24 //        tracking=false;
25 //    }
26 //    else if(event==CV_EVENT_LBUTTONUP)
27 //    {
28 //        select.width=x-select.x;//ÒÔÏÂ2ÐмÆËã³öÀ´µÄֵҪô¶¼´óÓÚ0£¬ÒªÃ´¶¼Ð¡ÓÚ0
29 //        select.height=y-select.y;
30 //        tracking=true;//×ó¼üÍêºó£¬¿ªÊ¼¸ú×Ù
31 //    }
32 //}
33
34 /************************************************************************************************************************/
35 /****                            Èç¹û²ÉÓÃÕâ¸öonMouse()º¯ÊýµÄ»°£¬Ôò¿ÉÒÔ»­³öÊó±êÍ϶¯¾ØÐοòµÄ4ÖÖÇéÐΠ                       ****/
36 /************************************************************************************************************************/
37 void onMouse(int event,int x,int y,int,void*)
38 {
39     //Point origin;//²»ÄÜÔÚÕâ¸öµØ·½½øÐж¨Ò壬ÒòΪÕâÊÇ»ùÓÚÏûÏ¢ÏìÓ¦µÄº¯Êý£¬Ö´ÐÐÍêºóorigin¾ÍÊÍ·ÅÁË£¬ËùÒÔ´ï²»µ½Ð§¹û¡£
40     if(select_flag)
41     {
42         select.x=MIN(origin.x,x);//²»Ò»¶¨ÒªµÈÊó±êµ¯Æð²Å¼ÆËã¾ØÐοò£¬¶øÓ¦¸ÃÔÚÊó±ê°´Ï¿ªÊ¼µ½µ¯ÆðÕâ¶Îʱ¼äʵʱ¼ÆËãËùÑ¡¾ØÐοò
43         select.y=MIN(origin.y,y);
44         select.width=abs(x-origin.x);//Ëã¾ØÐοí¶ÈºÍ¸ß¶È
45         select.height=abs(y-origin.y);
46         select&=Rect(0,0,frame.cols,frame.rows);//±£Ö¤ËùÑ¡¾ØÐοòÔÚÊÓÆµÏÔÊ¾ÇøÓòÖ®ÄÚ
47     }
48     if(event==CV_EVENT_LBUTTONDOWN)
49     {
50         select_flag=true;//Êó±ê°´ÏµıêÖ¾¸³ÕæÖµ
51         origin=Point(x,y);//±£´æÏÂÀ´µ¥»÷ÊDz¶×½µ½µÄµã
52         select=Rect(x,y,0,0);//ÕâÀïÒ»¶¨Òª³õʼ»¯£¬¿íºÍ¸ßΪ(0,0)ÊÇÒòΪÔÚopencvÖÐRect¾ØÐοòÀàÄڵĵãÊǰüº¬×óÉϽÇÄǸöµãµÄ£¬µ«ÊDz»º¬ÓÒϽÇÄǸöµã
53     }
54     else if(event==CV_EVENT_LBUTTONUP)
55     {
56         select_flag=false;
57     }
58 }
59
60 int main(int argc, unsigned char* argv[])
61 {
62     char c;
63
64     //´ò¿ªÉãÏñÍ·
65     VideoCapture cam(0);
66     if (!cam.isOpened())
67         return -1;
68
69     //½¨Á¢´°¿Ú
70     namedWindow("camera",1);//ÏÔʾÊÓÆµÔ­Í¼ÏñµÄ´°¿Ú
71
72     //²¶×½Êó±ê
73     setMouseCallback("camera",onMouse,0);
74
75     while(1)
76     {
77         //¶Áȡһ֡ͼÏñ
78         cam>>frame;
79         if(frame.empty())
80             return -1;
81
82         //»­³ö¾ØÐοò
83         rectangle(frame,select,Scalar(255,0,0),3,8,0);//Äܹ»ÊµÊ±ÏÔʾÔÚ»­¾ØÐδ°¿ÚʱµÄºÛ¼£
84
85         //ÏÔʾÊÓÆµÍ¼Æ¬µ½´°¿Ú
86         imshow("camera",frame);
87
88     //    select.zeros();
89         //¼üÅÌÏìÓ¦
90         c=(char)waitKey(20);
91         if(27==c)//ESC¼ü
92             return -1;
93     }
94
95     return 0;
96 }
¸´ÖÆ´úÂë
¡¡¡¡¿ÉÒÔ¿´³ö£¬³ÌÐòÖеÄselect_flagʹÓõúÜÇÉ¡£

http://www.cnblogs.com/tornadome ... /05/04/2483444.html
2Â¥2015-12-23 10:58:30
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

yadan33

гæ (³õÈëÎÄ̳)

#include "stdafx.h"
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <stdio.h>
#include <iostream>

using namespace cv;
using namespace std;
Rect select;
bool select_flag=false;
Point origin;
Mat frame;

/************************************************************************************************************************/
/****                    Èç¹û²ÉÓÃÕâ¸öonMouse()º¯ÊýµÄ»°£¬ÔòÖ»ÄÜ»­³ö´Ó×óÉϵ½ÓÒÏ£¬»òÕß´ÓÓÒϵ½×óÉϵľØÐοò                    ****/
/************************************************************************************************************************/
//void onMouse(int event,int x,int y,int,void*)
//{
//    if(event==CV_EVENT_LBUTTONDOWN)
//    {
//        select.x=x;
//        select.y=y;
//        tracking=false;
//    }
//    else if(event==CV_EVENT_LBUTTONUP)
//    {
//        select.width=x-select.x;//ÒÔÏÂ2ÐмÆËã³öÀ´µÄֵҪô¶¼´óÓÚ0£¬ÒªÃ´¶¼Ð¡ÓÚ0
//        select.height=y-select.y;
//        tracking=true;//×ó¼üÍêºó£¬¿ªÊ¼¸ú×Ù
//    }
//}

/************************************************************************************************************************/
/****                            Èç¹û²ÉÓÃÕâ¸öonMouse()º¯ÊýµÄ»°£¬Ôò¿ÉÒÔ»­³öÊó±êÍ϶¯¾ØÐοòµÄ4ÖÖÇéÐΠ                       ****/
/************************************************************************************************************************/
void onMouse(int event,int x,int y,int,void*)
{
    //Point origin;//²»ÄÜÔÚÕâ¸öµØ·½½øÐж¨Ò壬ÒòΪÕâÊÇ»ùÓÚÏûÏ¢ÏìÓ¦µÄº¯Êý£¬Ö´ÐÐÍêºóorigin¾ÍÊÍ·ÅÁË£¬ËùÒÔ´ï²»µ½Ð§¹û¡£
    if(select_flag)
    {
        select.x=MIN(origin.x,x);//²»Ò»¶¨ÒªµÈÊó±êµ¯Æð²Å¼ÆËã¾ØÐοò£¬¶øÓ¦¸ÃÔÚÊó±ê°´Ï¿ªÊ¼µ½µ¯ÆðÕâ¶Îʱ¼äʵʱ¼ÆËãËùÑ¡¾ØÐοò
        select.y=MIN(origin.y,y);
        select.width=abs(x-origin.x);//Ëã¾ØÐοí¶ÈºÍ¸ß¶È
        select.height=abs(y-origin.y);
        select&=Rect(0,0,frame.cols,frame.rows);//±£Ö¤ËùÑ¡¾ØÐοòÔÚÊÓÆµÏÔÊ¾ÇøÓòÖ®ÄÚ
    }
    if(event==CV_EVENT_LBUTTONDOWN)
    {
        select_flag=true;//Êó±ê°´ÏµıêÖ¾¸³ÕæÖµ
        origin=Point(x,y);//±£´æÏÂÀ´µ¥»÷ÊDz¶×½µ½µÄµã
        select=Rect(x,y,0,0);//ÕâÀïÒ»¶¨Òª³õʼ»¯£¬¿íºÍ¸ßΪ(0,0)ÊÇÒòΪÔÚopencvÖÐRect¾ØÐοòÀàÄڵĵãÊǰüº¬×óÉϽÇÄǸöµãµÄ£¬µ«ÊDz»º¬ÓÒϽÇÄǸöµã
    }
    else if(event==CV_EVENT_LBUTTONUP)
    {
        select_flag=false;
    }
}

int main(int argc, unsigned char* argv[])
{
    char c;

    //´ò¿ªÉãÏñÍ·
    VideoCapture cam(0);
    if (!cam.isOpened())
        return -1;

    //½¨Á¢´°¿Ú
    namedWindow("camera",1);//ÏÔʾÊÓÆµÔ­Í¼ÏñµÄ´°¿Ú

    //²¶×½Êó±ê
    setMouseCallback("camera",onMouse,0);

    while(1)
    {
        //¶Áȡһ֡ͼÏñ
        cam>>frame;
        if(frame.empty())
            return -1;

        //»­³ö¾ØÐοò
        rectangle(frame,select,Scalar(255,0,0),3,8,0);//Äܹ»ÊµÊ±ÏÔʾÔÚ»­¾ØÐδ°¿ÚʱµÄºÛ¼£

        //ÏÔʾÊÓÆµÍ¼Æ¬µ½´°¿Ú
        imshow("camera",frame);

    //    select.zeros();
        //¼üÅÌÏìÓ¦
        c=(char)waitKey(20);
        if(27==c)//ESC¼ü
            return -1;
    }

    return 0;
}
3Â¥2015-12-23 11:51:59
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ yadan33 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 085404 298·ÖÇóµ÷¼Á +11 ºôÀ²ºôÀ²ºôºôºô 2026-04-10 12/600 2026-04-14 08:38 by wfj257
[¿¼ÑÐ] Ò»Ö¾Ô¸»ªÄÏÀí¹¤´óѧ331·Ö²ÄÁÏÇóµ÷¼Á +10 ÌìÏÂww 2026-04-09 11/550 2026-04-13 23:25 by pies112
[¿¼ÑÐ] ¸´ÊÔµ÷¼Á +17 »ý¼«ÏòÉÏ£» 2026-04-10 19/950 2026-04-13 19:53 by ÏÐÈËÖÕÄÏɽ
[¿¼ÑÐ] 0854µ÷¼Á +10 ³¤¹­°Á 2026-04-12 13/650 2026-04-13 17:32 by ³¤¹­°Á
[²ÄÁϹ¤³Ì] ²ÄÁϵ÷¼ÁÍÆ¼ö +9 µ°¸âx2 2026-04-07 9/450 2026-04-13 09:07 by lhj2009
[¿¼ÑÐ] 314Çóµ÷¼Á +24 wakeluofu 2026-04-09 25/1250 2026-04-13 08:58 by lhj2009
[¿¼ÑÐ] 346·Ö£¬¹¤¿Æ0854Çóµ÷¼Á£¬×¨Ë¶ +6 moser233 2026-04-12 7/350 2026-04-12 22:11 by fqwang
[¿¼ÑÐ] 22408 352·ÖÇóµ÷¼Á +5 ŬÁ¦µÄÏÄÄ© 2026-04-09 5/250 2026-04-12 19:17 by wj165256
[¿¼ÑÐ] 0831ÉúÒ½¹¤µÚÒ»ÂÖµ÷¼Áʧ°ÜÇóÖú +12 СÐÜî£î£_s 2026-04-11 16/800 2026-04-12 16:28 by îÚè±
[¿¼ÑÐ] 267Çóµ÷¼Á +8 ÔÙæҲҪ³Ô·¹°¡ 2026-04-09 8/400 2026-04-11 21:42 by cfdbai
[¿¼ÑÐ] Çóµ÷¼Á +6 µçÆø300Çóµ÷¼Á²» 2026-04-08 6/300 2026-04-11 20:14 by ÄæË®³Ë·ç
[¿¼ÑÐ] 085501»úеר˶ 302·Ö ²»ÌôרҵÇóµ÷¼Á +7 Íôij. 2026-04-09 7/350 2026-04-11 14:37 by luhong1990
[¿¼ÑÐ] 0859£¬337Çóµ÷¼Á +4 ÑÐs. 2026-04-10 4/200 2026-04-11 11:34 by caotw2020
[¿¼ÑÐ] ²ÄÁÏÀà284µ÷¼Á +40 Ïë»»ÊÖ»ú²»Ïë½âÊ 2026-04-08 48/2400 2026-04-10 23:28 by 314126402
[¿¼ÑÐ] ¿¼Ñе÷¼Á +26 ˶ÐǸ° 2026-04-09 27/1350 2026-04-10 22:24 by Öí»á·É
[¿¼ÑÐ] Ò»Ö¾Ô¸ÎäÀí³µÁ¾ 281 Çóµ÷¼Á +5 Éϰ¶Ñо¿Éú. 2026-04-07 5/250 2026-04-09 15:56 by onlyÖÜ
[¿¼ÑÐ] »¯Ñ§¹¤³ÌÓë¼¼Êõרҵһ־Ը¹þ¹¤³Ì 291·ÖBÇø ¹ú¼Ò¼¶´ó´´¸ºÔðÈË ÓÐÒ»×÷ÂÛÎÄ +13 Emmy~ 2026-04-09 13/650 2026-04-09 14:47 by onlyÖÜ
[¿¼ÑÐ] Ò»Ö¾Ô¸Î÷ÄÏ´óѧÉúÎïѧѧ˶344 ÇóÉúÎïѧÏà¹Øµ÷¼Á/ÉúÎïÓëÒ½Ò© +7 ³¬È˲»»á·É@ 2026-04-08 7/350 2026-04-09 09:35 by gong120082
[¿¼ÑÐ] 085404£¬334·Ö£¬Çóµ÷¼Á +5 sunjie8888 2026-04-08 8/400 2026-04-09 07:26 by sunjie8888
[¿¼ÑÐ] 22408 266Çóµ÷¼Á +11 masss11222 2026-04-07 14/700 2026-04-08 11:06 by yulian1987
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û