opencv2 使用鼠标绘制矩形并截取和保存矩形区域图像

来源:互联网 发布:windows 直接登录 编辑:程序博客网 时间:2024/05/21 10:23

1 Fr: opencv2 使用鼠标绘制矩形并截取和保存矩形区域图像

鼠标操作属于用户接口设计,以前一直使用Qt来做,但是如果只需要简单的鼠标,键盘操作,直接调用opencv库的函数也未尝不可,鼠标操作之前已经接触很多了,在MFC,QT,OpenGL,等等中,理论主要就是两点,一是监控鼠标操作,鼠标点击,移动,松开,然后通过mouse_event识别判断出那一种鼠标的操作,根据不同的操作然后进行处理,二是在主函数中加入鼠标的回调函数,将鼠标操作与程序的窗口绑定。


                                              第一节 函数介绍

       暂时只接触了两个关于opencv2鼠标响应操作的函数,下面分别介绍一下:


    1.1 回调函数

      opencv2.4.5中,提供的鼠标回调函数是 setMouseCallback,函数声明如下:



2  Fr:opencv在图中画矩形rectangle用法


rectangle(Mat格式的图像, Point(左上角点的列坐标, 左上角的点的行坐标), Point(右下角点的列坐标, 右下角点的行坐标), Scalar(255, 0, 0), 1, 8, 0);


其函数定义为

Draws a simple, thick, or filled up-right rectangle.

C++: void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness=1, intlineType=LINE_8, int shift=0 )
C++: void rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=LINE_8, int shift=0 )

OpenCV中三彩色通道的顺序是BGR而不是RGB


Qt事件总结(鼠标、键盘)

QMouseEvent *event;
// 鼠标按下事件
void Widget::mousePressEvent(QMouseEvent *event)
{
    // 如果是鼠标左键按下   改变指针形状,并且存储当前指针位置与窗口位置的差值。
    if(event->button() == Qt::LeftButton){
        ···
    }
    // 如果是鼠标右键按下
    else if(event->button() == Qt::RightButton){
       ···
    }
}

// 鼠标移动事件       默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发:setMouseTracking(true); 
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    // 这里必须使用buttons()
    if(event->buttons() & Qt::LeftButton){  //进行的按位与
       ···
    }
}

// 如果是鼠标左键按下
    if(event->button() == Qt::LeftButton)






阅读全文
0 0
原创粉丝点击