OpenCv学习笔记五——计算机交互

鼠标和键盘

下面是使用鼠标绘制矩形的过程

用鼠标绘制矩形。

在这个例子中,鼠标左键被按下,记录起始点(矩形),当鼠标左键被释放后,在起始点和时放点之间绘制一个矩形,如果按下Esc键,则结束程序的运行。
程序代码如下:

#include "opencv2/opencv.hpp"
#include "iostream"
#include "opencv2/highgui/highgui_c.h"
using namespace std;
using namespace cv;
Point pt;
void OnMouse(int event,int x,int y,int flags,void* param)
{
    //将param强制转换为Mat指针,*(Mat*)=Mat,就如*(int*)=int一样
    Mat img=*(Mat*)param;
    switch(event)
    {
        case CV_EVENT_LBUTTONDOWN://鼠标左键被按下
        pt.x=x;
        pt.y=y;
        break;
        case CV_EVENT_LBUTTONUP://鼠标左键被释放
        rectangle(img,pt,Point(x,y),Scalar(0,255,0),2,8);//画矩形
        break;
        default:
        break;
    }

}
int main(void)
{
    Mat img(500,500,CV_8UC3,Scalar(255,255,255));
    //创建图像并指定宽、高格式,Scalar设置为白色
    namedWindow("mouse",CV_WINDOW_AUTOSIZE);//创建窗口mouse
    setMouseCallback("mouse",OnMouse,&img);
    //在窗口mouse中加载鼠标事件,并传入img的地址
    while(1)
    {
        imshow("mouse",img);//在窗口mouse中显示绘制的图像
        char c=(char)waitKey(10);
        if(27==c)//每隔10ms检查Esc键是否被按下
        break;//如果Esc键被按下,则结束循环
        else
        printf("Other Operation\n");
    }
    return 0;
}

滑动条

OpenCv中的滑动是一种图形化控件,通过鼠标拖动,可以选择需要的取值。下面通过滑动条来实现图像的缩放。

例1-9:利用滑动条实现图像缩放。

在这个例子中,通过滑动条选择不同的值,可以分别对图像进行20%,40%,60%,80%,100%比例的缩放。

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui_c.h>

using namespace std;
using namespace cv;

int val=1;
Mat srclmage,dstlmage;

void back(int,void*)
{
    Size dsize = Size(srclmage.cols*val/5,srclmage.rows*val/5);
    dstlmage=Mat(dsize,CV_32S);
    resize(srclmage,dstlmage,dsize);
    imshow("滑动条",dstlmage);
}
int main()
{
    namedWindow("源图像",WINDOW_NORMAL);//WINDOW_NORMAL表示窗口大小可以改变
    srclmage=imread("D:/360/lhc.png");
    imshow("源图像",srclmage);
    namedWindow("滑动条",WINDOW_AUTOSIZE);
    createTrackbar("比例20%,40%,%60%,80%,100%","滑动条",&val,5,back);
    back(val,0);
    waitKey(0);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值