cvSetMouseCallback使用

来源:互联网 发布:新会人民法院 淘宝拍卖 编辑:程序博客网 时间:2024/05/23 16:38
void cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, void* param=NULL );

window_name 回掉函数需要注册到的窗口,即产生事件的窗口

on_mouse 在注册窗口点击鼠标时,执行的回掉函数

param 用于传递到回掉函数的参数

#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <cxcore.h>
static unsigned int gPosition = 0;
static IplImage *src = NULL;
static IplImage *dst = NULL;
static CvPoint cvLeftAxis={-1,-1};
static CvPoint cvRightAxis={-1,-1};
static CvFont font;
static void cvOnMouseCallBack(int event,int x,int y,int flags,void *param)
{
    switch(event)
    {
           case CV_EVENT_LBUTTONDOWN:
        cvLeftAxis.x = x;
        cvLeftAxis.y = y;
        break;  
        case CV_EVENT_MOUSEMOVE:
        cvRightAxis.x = x;
        cvRightAxis.y = y;
        break;  
            case CV_EVENT_LBUTTONUP:        
        cvSetImageROI(src,cvRect(cvLeftAxis.x,cvLeftAxis.y,cvRightAxis.x,cvRightAxis.y));
        dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
        cvCopy(src,dst,NULL);
        cvNamedWindow("DstImage",1);        
        cvShowImage("DstImage",dst);
        cvResetImageROI(src);
        cvRectangle(src,cvLeftAxis,cvRightAxis,cvScalar(0,125,12,125),1,8,0);
        cvShowImage("SrcImage",src);
        break;   
        default:break;
    }

}
int main(int argv,char **argc)
{
    
    if(argv==2&&(src = cvLoadImage(argc[1],1)))
    {                
        cvNamedWindow("SrcImage",1);
        cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX,1,1,1,2,8);
        cvSetMouseCallback("SrcImage",cvOnMouseCallBack,NULL);            
        cvShowImage("SrcImage",src);    
        cvWaitKey(0);        
        cvReleaseImage(&src);
        cvReleaseImage(&dst);
        cvDestroyAllWindows();
    }
    return 0;
}


0 0
原创粉丝点击