图像变换方法

  • 一、图像放缩Resize
  • 二、图像翻转flip
  • 三、图像旋转warpAffine

一、图像放缩Resize

1.1 基本知识
  图像放缩用到了许多插值方法,常见的差值算法有线性插值、立方差值、双立方差值、采样放缩算法等等。
  所使用的API为 resize(),函数的定义如下

void resize(
InputArray src, //输入图像
OutputArray dst,//输出图像
Size dsize,     //输出尺寸
double fx=0,   //水平缩放比例
double fy=0,   //垂直缩放比例
int interpolation=INTER_LINEAR //插值方式
)
  • 其中dsize为0时,fx和fy均不可为零;fx和fy为0时,输出图像按dsize输出
  • interpolation内插方式有以下四种:
    • CV_INTER_NEAREST  最邻近插值点法
    • CV_INTER_LINEAR   双线性插值法
    • CV_INTER_AREA    邻域像素再取样插补
    • CV_INTER_CUBIC     双立方插补,4*4大小的补点

1.2 示例程序

void MyDemo::resize_Demo(Mat& image) {Mat zoomin, zoomout;   //定义输出图像int h = image.rows;        //获取原图像的宽高int w = image.cols;resize(image, zoomin, Size(w * 1.5, h * 1.5), 0, 0, INTER_LINEAR);    //图像放大1.5倍imshow("zoomin", zoomin);resize(image, zoomout, Size(w / 2, h / 2), 0, 0, INTER_LINEAR);        //图像缩小2倍imshow("zoomout", zoomout);
}

二、图像翻转flip

  图像反转就是将图像左右或上下反转镜像。所用到的函数是 flip(),函数的定义如下。

 void cv::flip(cv::InputArray    src,            // 输入图像cv::OutputArray dst,             // 输出图像int          flipCode = 0   // >0: 沿y轴翻转, 0: 沿x轴翻转, <0: x、y轴同时翻转);

测试程序如下:

void MyDemo::flip_Demo(Mat& image) {Mat dst;flip(image, dst, 0); //上下翻转imshow("上下翻转", dst);flip(image, dst, 1);    //左右翻转imshow("左右翻转", dst);flip(image, dst, -1);   //对角线翻转(180°旋转)imshow("对角线翻转(180°旋转)", dst);
}

三、图像旋转warpAffine

void cv::warpAffine (InputArray      src,    //输入图像OutputArray   dst,    //输出图像InputArray        M,      //变换矩阵Size          dsize,  //输出图像大小int             flags = INTER_LINEAR,          //插值方式int           borderMode = BORDER_CONSTANT,  //图像边缘像素模式const Scalar& borderValue = Scalar()         //边界填充值

其中M变换矩阵可以通过如下函数获得,旋转矩阵的形式如下:

M=cv2.getRotationMatrix2D(center, angle, scale)


由于旋转之后,图像的大小会发生变化,因此需要重新计算图像的长宽,计算方法可以参考下图:

图像旋转的示例程序如下:

void MyDemo::rotate_Demo(Mat& image) {Mat dst, M;int h = image.rows;int w = image.cols;M = getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0);   //定义变换矩阵Mdouble cos = abs(M.at<double>(0, 0));   //求cos值double sin = abs(M.at<double>(0, 1)); //求sin值int nw = cos * w + sin * h;        //计算新的长、宽int nh = sin * w + cos * h;M.at<double>(0, 2) += (nw / 2 - w / 2);       //计算新的中心M.at<double>(1, 2) += (nh / 2 - h / 2);warpAffine(image, dst, M, Size(nw,nh), INTER_LINEAR,0,Scalar(255,255,255));imshow("Rotation", dst);
}

【学习OpenCV4】图像变换方法总结(放缩、翻转、旋转)相关推荐

  1. 翻转和旋转计算机教学,小学信息技术《翻转/旋转》教学设计及教学反思

    <汤姆和杰瑞>教学设计 教学目标: 1.能够使用学过的绘图工具,结合翻转与旋转,绘制精美的图画. 2.练习中要从不同的角度对图形进行翻转和旋转,通过反复练习,掌握图形变形的操作技巧 3.在 ...

  2. 比较全的深度学习数据预处理方法

    当前深度学习的预处理方法 1.中心化/零均值化 程序代码 2.标准化/归一化 程序代码 (1)标准化与归一化的联系和差异 联系 差异 (2)为什么要归一化/标准化 ①某些模型求解需要 ②一些分类器需要 ...

  3. 面向弹载图像的深度学习网络压缩方法研究

    这里写自定义目录标题 源自:航空兵器 作者:高一博 杨传栋 陈栋 凌冲 摘 要 针对基于深度学习目标识别算法具有网络结构复杂.参数量大.计算延迟高等特点,难以直接应用于弹载任务的问题,对网络轻量化方法 ...

  4. 【学习OpenCV4】案例1:Windows OpenCV C++语言开发环境搭建

    本文的案例内容源自于图书**<学习OpenCV 4:基于Python的算法实战>**,该书是国内第一本完整介绍OpenCV4的图书,第一章有在各个平台搭建环境的介绍,后面每个章节都有对模块 ...

  5. Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法

    Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法 今天修改一个比较奇怪的bug: 在操作一个事件的时候,使用eventbus来监听事件,断点发现有时候是会执 ...

  6. 【学习OpenCV4】键盘鼠标操作总结

    本文分享内容来自图书<学习OpenCV 4:基于Python的算法实战>,该书内容如下: 第1章 OpenCV快速入门: 第2章 图像读写模块imgcodecs: 第3章 核心库模块cor ...

  7. 【学习OpenCV4】漫水填充算法使用总结

    本文分享内容来自图书<学习OpenCV 4:基于Python的算法实战>,该书内容如下: 第1章 OpenCV快速入门: 第2章 图像读写模块imgcodecs: 第3章 核心库模块cor ...

  8. 计算机视觉-深度学习图像检测方法梳理

    计算机视觉-深度学习图像检测方法梳理 由于之后要转方向啦,趁这段时间整理手中硕士研究方向的一些阅读笔记,这是一篇关于计算机视觉的基础知识梳理 先搞清一些小知识点 首先我们要弄清楚图像分类.目标定位.语 ...

  9. 【学习OpenCV4】OpenCV边缘检测算法总结

    本文分享内容来自图书<学习OpenCV 4:基于Python的算法实战>,该书内容如下: 第1章 OpenCV快速入门: 第2章 图像读写模块imgcodecs: 第3章 核心库模块cor ...

最新文章

  1. js innerHTML 改变div内容的方法
  2. linux 追加多行文件,linux多行文件信息追加
  3. android resolvesize方法,Android 自定义View中onMeasure()中使用resolveSize()是什么意思?
  4. 了解快照隔离和行版本控制
  5. 《天天数学》连载34:二月三日
  6. go java websocket_java的连接wss的websocket服务器代码如何转成go代码
  7. Latex beamer 学习总结
  8. Java多线程 ReentrantLock、Condition 实现生产者、消费者协作模式
  9. IAP测试购买失败,Error Domain=SKErrorDomain Code=0 无法连接到 iTunes Store
  10. 微信小程序手动获取自己位置wx.chooseLocation
  11. 扫描指定ip的指定端口,识别开放的端口所对应的服务
  12. 【微信小程序】性能分析Trace工具
  13. java 解析dex_将DEX反编译成Java源代码
  14. httpclient4下载图片 java实现
  15. c语言怎样处理lrc文件格式,lrc文件的一般格式是什么_教你如何打开lrc文件 - 驱动管家...
  16. 发布infopath模板到sharepoint站点(Infopath 2007)
  17. 基于OMNET++仿真平台的4维超立方体网络仿真
  18. 深度学习笔记~感受野(receptive field)的计算
  19. mycat 分表分库
  20. 闰秒(leapsecond)和原子钟(Atomic Clock)究竟是什么

热门文章

  1. c#获取网页源码全解
  2. zynq开发系列4:EMIO连接按键控制MIO连接的灯
  3. quartus仿真6:74194构建线性反馈移位寄存器计数器LFSR
  4. 串的复制——串传送指令MOVSB和方向标志位DF和CLD和REP
  5. markdown与latex:矩阵的书写
  6. 6.pragma pack
  7. layer + ajax 弹出框
  8. Kettle行列转换
  9. 王者调整期选股技术之喇叭花开
  10. 如何在linux centos下安装git(转)