由于工作原因,最近开始研究图像处理相关技术,开始接触OpenCV,主要是为了重构PACS系统中的平移、缩放和旋转三个图像操作的接口函数。opencv作为目前计算机视觉领域的热门开源库,有着稳定且功能强大的优点。下面是刚接触时的一些研究,主要是学习仿射,及一些相关的函数接口的使用,这里整理一下,方便以后查看,若有错误的地方还请谅解,随意评论纠正!
看到很多代码示例都有cv::Mat的字眼,cv是opencv中的一个头文件,我们先简单介绍一下Mat这个类
cv::Mat: 用于分配内存创建对象
采用类的特性,将内存管理和数据信息封装在类的内部,学过c++11的小伙伴应该就很熟悉,这个描述与智能指针很像
主要组成:矩阵头和矩阵数据
拷贝赋值:采用浅拷贝的方式,只复制矩阵头信息,引用矩阵数据
优点:
- 不需要手动申请一块内存;
- 在不需要时不用再手动释放内存;
- 可以通过类的封装,方便的获取到数据的相关信息。
看完它所具有的优点,让人联想到C++11的共享指针,而Mat也是采取引用计数的方法,当引用计数变为0时释放内存。
接下来接下一些接口函数:
Mat imread(const string &filename, int flag = 1)
功能:读取图像
filename:图片路径名
flag:载入标识,指定加载图像的颜色类型,默认值为1,表示三通道的彩色图像
-1:表示按解码得到的方式读入图像
0:表示按单通道方式读入图像,即灰白图像
void imshow(const string &winname, InputArray mat)
功能:显示图像
winname:显示的窗口标题,