OpenCV仿射变换——平移

OpenCV仿射变换——平移

  • OpenCV仿射变换——平移
    • 公式及原理
    • OpenCV函数
    • 实现代码
    • 代码执行效果

公式及原理

定义原坐标为(x,y),平移后(xoffect,yoffset)后的坐标为(x*,y* ):

也就是说,原来在(x,y)位置的像素值,被平移到(x,y )位置处,为方便计算机运算,可以写成矩阵样式:


在OpenCV中的防射变换矩阵M就是:

OpenCV函数

通过cv::getAffineTransform函数得到变换矩阵
cv::Mat getAffineTransform(cv::InputArray src, cv::InputArray dst)
输入
InputArray src:表示输入的三个点
InputArray dstL:表示输出的三个点
返回
cv::Mat对象
通过cv::warpAffine得到平移或旋转的cv::Mat对象
void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar());
src : Source image.
**dst **: Destination image that has the size dsize and the same type as src .
M –:2\times 3 transformation matrix.
dsize : Size of the destination image.
flags : Combination of interpolation methods (see resize() ) and the optional flag WARP_INVERSE_MAP that means that M is the inverse transformation ( \texttt{dst}\rightarrow\texttt{src} ).
borderMode : Pixel extrapolation method (see borderInterpolate() ). When borderMode=BORDER_TRANSPARENT , it means that the pixels in the destination image corresponding to the “outliers” in the source image are not modified by the function.
borderValue – Value used in case of a constant border. By default, it is 0.
无返回值

实现代码

#include<iostream>
#include<opencv2/core.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/highgui.hpp>int main() {cv::Mat src = cv::imread("D:\\Windows\\WorkSpace\\imageTest\\OIP.jpg",cv::IMREAD_COLOR);if (src.empty()) {std::cout << "failed to read image." << std::endl;return EXIT_FAILURE;}cv::Point2f pt1[3], pt2[3];float xoffset = src.cols / 5;float yoffset = src.rows / 3;/*平移前的位置*/pt1[0] = cv::Point2f(0, 0);//            0  0pt1[1] = cv::Point2f(xoffset, 0);//      x  0pt1[2] = cv::Point2f(0, yoffset);//      0  y/*平移后的位置*/pt2[0] = cv::Point2f(xoffset, yoffset);//         x  ypt2[1] = cv::Point2f(xoffset * 2, yoffset);//    2x  ypt2[2] = cv::Point2f(xoffset, yoffset * 2);//     x  2y//生成只有平移的防射矩阵cv::Mat M;M = cv::getAffineTransform(pt1, pt2);std::cout << M << std:: endl;int col = src.cols;int row = src.rows;//std::cout << src.size() << std::endl;//生成新的显示结果的矩阵(图)cv::Mat dst = cv::Mat::zeros(col + xoffset, row + yoffset, CV_32FC1);//std::cout << dst.size() << std::endl;//平移cv::warpAffine(src, dst, M, dst.size());cv::namedWindow("平移前", cv::WINDOW_AUTOSIZE);cv::imshow("平移前", src);cv::namedWindow("平移后", cv::WINDOW_AUTOSIZE);cv::imshow("平移后", dst);cv::waitKey(0);
}

代码执行效果

OpenCV仿射变换--平移相关推荐

  1. opencv仿射变换:平移,缩放和旋转

    目录 仿射变换原理 opencv中仿射变换实现 使用getAffineTransform()函数求仿射变换矩阵 使用 getRotationMatrix2D()函数获取仿射矩阵 使用仿射矩阵对图像做仿 ...

  2. OpenCV仿射变换 SURF特征点描述合辑

    原文:http://blog.csdn.net/poem_qianmo/article/details/33320997?utm_source=tuicool&utm_medium=refer ...

  3. OpenCV仿射变换Affine Transformations

    OpenCV仿射变换Affine Transformations 仿射变换Affine Transformations 目标 理论 什么是仿射变换? 我们如何获得仿射变换? 代码 这个程序做什么? 解 ...

  4. Python OpenCV 图像平移,取经之旅第 10 天

    今天是持续写作的第 43 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 本篇博客学习 OpenCV 中关于图像平移的方法,核心学习到的方法是 warpAffine . 取经之旅第 ...

  5. opencv 图像平移、缩放、旋转、翻转 图像仿射变换

    图像几何变换 图像几何变换从原理上看主要包括两种:基于2x3矩阵的仿射变换(平移.缩放.旋转.翻转).基于3x3矩阵的透视变换. 图像平移 opencv实现图像平移 实现图像平移,我们需要定义下面这样 ...

  6. opencv 仿射变换与透视变换详解

    常见的2D图像变换从原理上讲主要包括基于2×3矩阵的仿射变换和基于3×3矩阵透视变换. 仿射变换 原理 基本的图像变换就是二维坐标的变换:从一种二维坐标(x,y)到另一种二维坐标(u,v)的线性变换: ...

  7. (三) OpenCV仿射变换与透射变换(Affine and Perspective Transform)

    图像最基本的变换即仿射变换(Affine Transform)和透射变换(Perspective Transform).仿射变换是对一个向量空间进行一次线性变换并接上一次平移.透射变换是中心投影的射影 ...

  8. OpenCV——仿射变换

    getRotationMatrix2D()函数用于计算旋转矩阵和warpAffine()函数用于实现图像的仿射变换 Mat getRotationMatrix2D( Point2f center, d ...

  9. opencv仿射变换和透视变换门牌号实践总结

    前几日在门牌号识别优化过程中发现当摄像头拍摄角度倾斜或者相机仰头拍摄出来的门牌号发生了畸变,即使能够找到门牌号区域也大大降低了识别的准确度,因此想到了倾斜矫正--仿射变换和透视变换,关于这两个概念网上 ...

最新文章

  1. Tornado写简易服务器
  2. Bitsocket——BCH实时API,为BCH带来无限可能
  3. Leonbao:MapKit学习笔记
  4. 防抖 节流_面试必备考点:防抖与节流
  5. 结构化异常捕获空指针异常
  6. 30个漂亮的大自然风格网页设计作品欣赏
  7. 拯救者linux无法正常关机,Ubuntu无法关机解决办法
  8. JavaSE学习--HTML
  9. 系统运行后修改linux系统时区
  10. 管螺纹如何标注_【专业知识】一次搞全所有螺纹常识,很基础
  11. Android 项目必备(二十)-->NFC 的基本使用
  12. 打印服务器 支持 佳能 2900+打印机,Deepin20(1002版本)安装佳能Canon LBP2900+打印机
  13. C#实现检测打印机状态(包括打印机是否缺纸、打印队列任务数)
  14. wordpress邮件地址混淆 你没权限访问整个邮件地址造成的死链接
  15. scrum立会报告+燃尽图(第二周第六次)
  16. UEditor 编辑器使用 最新版本1.4.3
  17. 5G/NR 上行免授权
  18. 阿里正式启动2021届春季校招!字节跳动Android面试凉凉经,实战解析
  19. 职称计算机Word2003是考什么,职称计算机考试:word2003考点
  20. drupal安装模块

热门文章

  1. 【期末复习】网络空间安全导论
  2. 智慧园区建设三个方面
  3. 刷题 最长不重复子串
  4. Linux 下 vi/vim 文本编辑器超详细使用指南(转载)
  5. (原創) 如何將DE2_70_TV範例加上Sobel Edge Detector? (SOC) (Verilog) (Image Processing) (DE2-70)...
  6. 钟汉良日记:知识付费副业又收300
  7. 老客户难以维护?CRM客户管理系统给你支招
  8. 树莓派摄像头安装和使用
  9. ROS安装罗技C170摄像头
  10. 计算机网络之TCP滑动窗口