opencv highgui初步

opencv HighGUI初步

Mat类简介

Mat是图像容器,可以理解为一个矩阵,每一个点对应一个像素点

Mat::Mat(int _rows, int _cols, int _type)
    : flags(MAGIC_VAL), dims(0), rows(0), cols(0), data(0), datastart(0), dataend(0),
      datalimit(0), allocator(0), u(0), size(&rows), step(0)
{
    create(_rows, _cols, _type);
}

图片读取

Mat imread(const string& filename,int flags=1);
参数含义
filename载入图片的路径名
flags图片的载入标志,如8位灰度等
//flags取值
enum{
/* 8bit, color or not */
    CV_LOAD_IMAGE_UNCHANGED  =-1,
/* 8bit, gray */
    CV_LOAD_IMAGE_GRAYSCALE  =0,
/* ?, color */
    CV_LOAD_IMAGE_COLOR      =1,
/* any depth, ? */
    CV_LOAD_IMAGE_ANYDEPTH   =2,
/* ?, any color */
    CV_LOAD_IMAGE_ANYCOLOR   =4,
/* ?, no rotate */
    CV_LOAD_IMAGE_IGNORE_ORIENTATION  =128
};

图片展示

Mat imshow(const string& winname, InputArray mat);
参数含义
winname窗口名称
mat需要显示的图像
typedef const _InputArray& InputArray;

窗口设定

void nameWindow(const string& winname, int flags=WINDOW_AUTOSIZE);
//第一个参数,窗口标识名字
//第二个参数,窗口标识
//如果已经具有相同名称的窗口已经存在,则函数不做任何事

//第三个参数的可取值的介绍,来自源文件
enum WindowFlags {
       WINDOW_NORMAL     = 0x00000000, //!< the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size.
       WINDOW_AUTOSIZE   = 0x00000001, //!< the user cannot resize the window, the size is constrainted by the image displayed.
       WINDOW_OPENGL     = 0x00001000, //!< window with opengl support.

       WINDOW_FULLSCREEN = 1,          //!< change the window to fullscreen.
       WINDOW_FREERATIO  = 0x00000100, //!< the image expends as much as it can (no ratio constraint).
       WINDOW_KEEPRATIO  = 0x00000000, //!< the ratio of the image is respected.
       WINDOW_GUI_EXPANDED=0x00000000, //!< status bar and tool bar
       WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way
    };//

图片写入文件

bool imwrite(const string&filename, InputArray img,
	const vector<int>& params=vector<int>&);
//第一个参数,文件地址名
//第二个参数,图像名
//第三个参数,表示为特定格式保存的参数编码

图片混合

void cvAddWeighted(const CvArr* src1,double alpha,const CvArr* src2, 
    double beta,double gamma, CvArr* dst 
 );
参数含义
src1,src2两张要融合的图片
alpha,beta第一张图片的权重(透明值)
gamma常数项,往往取决于像素要调整到的平均值和最大值
dst混合后的图片

该函数采用的是加权融合图像,每个像素点的像素是两种源图片的对应像素点的像素加权算出来的,融合公式如下:
dst = alpha*src1 + beta*src2 + gamma
当alpha为a,beta为1-a,gamma为0,其中,a>=0且a<=1时,融合方程被称为标准融合方程


滑动条

int createTrackbar (const string& trackbarName,const string& winName,int *value,
	int count,TrackbarCallback onChange=0,void *userdata=0);
参数含义
trackName滑动条名称
winName窗口名称
value表示滑块的位置
count表示滑块可以达到的最大位置的值
onChange默认值为0,这是一个指向回调函数的指针,每次滑块位置发生改变时,这个函数都会进行回调。并且这个函数的原型必须时void XXXX(int ,void* );其中第一个参数时轨迹条的位置,第二个参数时用户数据。如果回调时NULL指针,则表示没有回调函数,仅value发生改变
userdata默认值也是0,这个参数时用户传给回调函数的数据,用来处理轨迹条事件
//举个栗子
	createTrackerbar("透明度","效果图",&AlphaValue,100,on_Change);

另外还有常于此配合的函数

int getTrackbarPos(const string& trackbarname,const string& winname);
//用于获取当前滚动条的位置

鼠标操作

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);
userdata传给回调函数的参数

p.s userdata简介

  • 作用:可以减少全局变量的使用,将在回调函数里的一部分“不得不使用”的全局变量作为参数传给回调函数。可以封装在一个结构体里,在使用的时候传给回调函数。 原文链接

参考:
《OpenCV 3 编程入门》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值