图像的平移操作是将图像的所有像素坐标进行水平或者垂直方向移动,也就是所有像素点按照给定的偏移量在水平方向上沿x轴、垂直方向上沿y轴移动。平移变换分为两种,图像大小变化和图形大小不变。第一种是保证图像平移的完整性,第二种图像原信息可能部分丢失。

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>
//平移操作,图像大小不变
cv::Mat imageTranslation1(cv::Mat & srcImage, int x0ffset, int y0ffset)
{
    int nRows = srcImage.rows;
    int nCols = srcImage.cols;
    cv::Mat resultImage(srcImage.size(), srcImage.type());
    //遍历图像
    for (int i = 0; i < nRows; i++)
    {
        for (int j = 0; j < nCols; j++)
        {
            //映射变换
            int x = j - x0ffset;
            int y = i - y0ffset;
            //边界判断
            if (x >= 0 && y >= 0 && x < nCols && y < nRows)
            {
                resultImage.at<cv::Vec3b>(i, j) = srcImage.ptr<cv::Vec3b>(y)[x];
            }
        }
    }
    return resultImage;
}
//平移操作,图形大小改变
cv::Mat imageTranslation2(cv::Mat & srcImage, int x0ffset, int y0ffset)
{
    //设置平移尺寸
    int nRows = srcImage.rows + abs(y0ffset);
    int nCols = srcImage.cols + abs(x0ffset);
    cv::Mat resultImage(nRows, nCols, srcImage.type());
    //图像遍历
    for (int i = 0; i < nRows; i++)
    {
        for (int j = 0; j < nCols; j++)
        {
            int x = j - x0ffset;
            int y = i - y0ffset;
            //边界判断
            if (x >= 0 && y >= 0 && x < nCols && y < nRows)
            {
                resultImage.at<cv::Vec3b>(i, j) = srcImage.ptr<cv::Vec3b>(y)[x]; //Vec3b是一种图像像素值的类型
            }
        }
    }
    return resultImage;
}
int main()
{
    //读取图像
    cv::Mat srcImage = cv::imread("C:\\Users\\LP\\Desktop\\C++\\ConsoleApplication4\\ConsoleApplication4\\1.jpg");
    if (srcImage.empty())
    {
        return -1;
    }
    
    //显示原图像
    cv::imshow("原图像", srcImage);
    int x0ffset = 50;
    int y0ffset = 80;
    //图像左平移不改变大小
    cv::Mat resultImage1 = imageTranslation1(srcImage, x0ffset, y0ffset);
    cv::imshow("resultImage1", resultImage1);
    //图像左平移改变大小
    cv::Mat resultImage2 = imageTranslation2(srcImage, x0ffset, y0ffset);
    cv::imshow("resultImage2", resultImage2);
    //图像又平移不改变大小
    x0ffset= -50;
    y0ffset = -80;
    cv::Mat resultImage3 = imageTranslation1(srcImage, x0ffset, y0ffset);
    cv::imshow("resultImage3", resultImage3);
    cv::waitKey(0);
    return 0;
}

opencv实现图像平移相关推荐

  1. 使用Python,OpenCV进行图像平移转换

    使用Python,OpenCV进行图像平移转换 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何使用Python,OpenCV对图像进行平移转换.平移是图像沿x轴和y轴的移动.使用平移, ...

  2. 基于OpenCV实现图像平移

    [1]理论知识 图像平移就是将图像中所有的点按照指定的平移量水平或者垂直移动 [2]完整代码 /*--------------------------------------------------- ...

  3. opencv之图像平移

    图像平移指的是沿水平方向或垂直方向进行图像的移动. 平移变换公式: ​​​​​​​         对于原始图像而言,正变换矩阵: 对于目标图像而言,逆变换矩阵: 代码: #include<op ...

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

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

  5. 应用OpenCV进行图像旋转和平移

    简 介: 本文中,你了解了了如何通过OpenCV完成对于图像的旋转和平移.我们首先通过 getRotationMatrix2D() 获取2D旋转矩阵,然后完成了对于图像的旋转.具体是通过warpAff ...

  6. 在OpenCV环境下写的两个图像平移C和C++源代码

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 图像平移的概念就不用多说了,直接上经实测无误的代 ...

  7. opencv python 图像缩放/图像平移/图像旋转/仿射变换/透视变换

    Geometric Transformations of Images 1图像转换 OpenCV提供了两个转换函数cv2.warpAffine和cv2.warpPerspective,可以使用它们进行 ...

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

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

  9. OpenCV-Python学习(18)—— OpenCV 图像几何变换之图像平移(cv.warpAffine)

    1. 学习目标 学习图像的平移矩阵: 学习 OpenCV 图像平移函数. 2. 图像的平移矩阵 平移是物体位置在水平和垂直方向的移动. 像素点 (x,y) 沿 x 轴平移 dx.沿 y 轴平移 dy, ...

  10. opencv之图像翻转、平移、缩放、旋转、仿射学习笔记

    opencv版本:opencv3.4.1 目录 1. 图像翻转(坐标映射) 2.  平移 3. 缩放 4. 旋转 1. 图像翻转(坐标映射) int main() {cv::Mat srcImage ...

最新文章

  1. 【廖雪峰Python学习笔记】函数式编程
  2. jpa报错No property found for column ‘first_time‘ mapped to field ‘first_time‘
  3. oracle 表改表空间,Oracle批量修改用户表table的表空间
  4. [转] Tomcat 系统架构与设计模式,第 1 部分: 工作原理
  5. 不同模块下包重名怎么解决_注册公司核名通不过,疑难核名有办法解决吗?
  6. linux中指令简约版
  7. Exchange Server 2013 RTM发布
  8. 平面设计完全手册_平面设计师的三大软件:PS、AI、ID该如何选择?| 平面设计纯干货...
  9. 数学建模 最优化方法:动态规划 学习笔记
  10. Delphi微信公众号开发
  11. 学习Java. 基础 17: 二维数组
  12. 阅读替换净化规则_免费阅读APP-阅读下载 v3.2安卓版(免费小说阅读器纯净无广告)-KK下载站...
  13. 第27月第25天 clang -rewrite-objc main.m
  14. TinyOS总体介绍
  15. arduino+ESP8266网络控制LED灯
  16. PostgreSQL 14分布式Citus单机多实例部署
  17. 有什么好的电影网站,好的在线电影网站
  18. SourceMap源码映射详细讲解
  19. xserver服务端口号_服务器怎么开通端口号
  20. 手机客户端控制互联网电视

热门文章

  1. 阿里云服务器的80端口被封了么?
  2. 百度95后程序员删库跑路,因工作变动和对领导不满,已被民警抓获
  3. 2021-05-23
  4. 2019年香港科大EMBA校友会年度盛会在珠海圆满落幕
  5. 微信公众号基础入门知识
  6. 计算机应用类型分类 余额宝属于,按计算机应用的类型分类,余额宝属于____。...
  7. 机器视觉——镜头介绍
  8. python爬取去哪儿网机票_5元机票?去哪儿网及深航回应:未发现售价5元的机票订单...
  9. 计算机主板巨头,主板主要厂商
  10. PHP实现文件下载两种方式(a标签和header标签)