数字图像处理(入门篇)六 图像数据预处理之坐标变化

2023-11-18

目录

 1 平移

 2 镜像

 3 旋转

 4 缩放

 图像的坐标变换又称为图像的几何计算,常见的基本变换包括:平移、旋转、镜像和缩放等等。

1 平移

 (1)代码

使用OpenCV仿射变换函数(cv2.warpAffine)实现平移操作。

import numpy as np
import matplotlib.pyplot as plt
import cv2
def translation(img, x, y):
    (h, w) = img.shape[:2]
    M = np.float32([[1, 0, x], [0, 1, y]])# 定义平移矩阵
    translation_img = cv2.warpAffine(img, M, (w, h))
    return translation_img
def run(img_path):
    img = cv2.imread(img_path)
    shifted_1 = translation(img, 0, 50)# 下移50像素
    shifted_2 = translation(img, 100, 50)# 右移100,下移50像素
    shifted_3 = translation(img, -50, 0)# 左移50像素
    cv2.imwrite("result.jpg", shifted_3)
    titles = ["img", "(0,50)", "(100,50)", "(-50,0)"]
    images = [img, shifted_1, shifted_2, shifted_3]
    for i in range(4):
        plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i])
        plt.xticks([]), plt.yticks([])
    plt.show()
if __name__ == '__main__':
    run("test_rgb.jpg")
    pass

(2)结果图

 2 镜像

 (1)代码

import matplotlib.pyplot as plt
import cv2
def run(img_path):
    img = cv2.imread(img_path)
    flip_0 = cv2.flip(img, 0)# 垂直镜像
    flip_1 = cv2.flip(img, 1)# 水平镜像
    titles = ["img", "vertical", "horizontal"]
    images = [img, flip_0, flip_1]
    for i in range(3):
        plt.subplot(1, 3, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i])
        plt.xticks([]), plt.yticks([])
    plt.show()
if __name__ == '__main__':
    run("test_rgb.jpg")
    pass

(2)结果图

 3 旋转

(1)代码

使用 OpenCV 仿射变换函数(cv2.warpAffine)实现旋转操作。

import numpy as np
import matplotlib.pyplot as plt
import cv2
def rotateImg(img, angle, center=None, scale=1.0):
    (h, w) = img.shape[:2]
    if center is None:
        center = (w / 2, h / 2)# 旋转中心的缺失值为图像中心
    M = cv2.getRotationMatrix2D(center, angle, scale)# 调用计算旋转矩阵函数
    rotated_img = cv2.warpAffine(img, M, (w, h))
    return rotated_img
def run(img_path):
    img = cv2.imread(img_path)
    rotated_1 = rotateImg(img, 45)# 逆时针45度
    rotated_2 = rotateImg(img, -60)# 顺时针60度
    rotated_3 = rotateImg(img, 90)# 逆时针90度
    titles = ["img", "45", "-60", "90"]
    images = [img, rotated_1, rotated_2, rotated_3]
    for i in range(4):
        plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i])
        plt.xticks([]), plt.yticks([])
    plt.show()
if __name__ == '__main__':
    run("test_rgb.jpg")
    pass

(2)结果图

 4 缩放

(1)缩放

 (2)插值

 

 优点:放大后图像质量高,不会出现像素值不连续的情况。

(3)代码

import cv2
def run(img_path):
    img = cv2.imread(img_path)
    (h, w) = img.shape[:2]
    # 最邻近插值
    resized_1 = cv2.resize(img, (10, 10), interpolation=cv2.INTER_NEAREST)
    # 双线性插值
    resized_2 = cv2.resize(img, (600, 700), interpolation=cv2.INTER_LINEAR)
    cv2.namedWindow('(10, 10)', cv2.WINDOW_NORMAL)
    cv2.imshow("(10, 10)", resized_1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
if __name__ == '__main__':
    run("test.jpg")
    pass

 (4)结果图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数字图像处理(入门篇)六 图像数据预处理之坐标变化 的相关文章

随机推荐

  • Android studio 模拟器启动黑屏解决办法附图详细

    Android studio 模拟器启动黑屏解决办法附图详细 问题描述 原因分析 android模拟器在创建时 一般默认设置为热启动 所以每次关闭模拟器时 会提示保存当前运行界面状态 若选择取消 则下一次启动会以最近一次保存的状态启动显示
  • Pycharm安装CV2

    1 win r 然后输入cmd进入中端 安装的指令用 pip install opencv python i http mirrors aliyun com pypi simple trusted host mirrors aliyun c
  • husky hooks 不起作用的解决方法

    问题 在项目实际应用过程中遇到过一次 husky hooks 不生效的问题 这里记录下 问题表现 问题比较直观 通过 huksy install 之后 git commit 时 pre commit 设置的 hooks 不起作用 重新安装
  • 最详细的Vivado安装教程

    V i v a d o 安 装
  • Date类型与字符串的相互转换

    Date时间类型与字符串的相互转换 Test public void date throws ParseException 一 Date时间类型转字符串 1 获取当前时间 Date date new Date 2 设定时间格式 下面两行可以
  • 2017蓝桥杯C++A组题解集合

    总结 蓝桥杯的题目大多数都是暴利或者dfs bfs解出来的 注意往这上面思考 下面是赛题的链接 https wenku baidu com view 951dab772a160b4e767f5acfa1c7aa00b52a9d2d html
  • 程序发生run time error原因及解决方案

    程序发生run time error原因及解决方案 runtime error现象即产生原因 属于运行时错误 当程序运行到一半 程序发生崩溃 1 数组过小 2 除数为零 3 大数组定义在函数内 4 指针越界 5 还有可能是程序抛出了未接收的
  • angular Model 指令

    ng model指令用于绑定应用程序数据到HTML控制器 input select textarea 的值 可以将输入域的值域AngularJS创建的变量绑定 并且支持双向绑定 如下例子 div name div
  • elementUI使用el-upload上传文件写法总结及避坑,上传图片/视频到本地/服务器以及回显+删除

    Element Upload 上传 Element Upload官方文档 el upload 具体细节只看官方文档 本篇主要介绍避坑点和用法总结 注意点以及坑 本地上传想要回显图片视频 使用on success是没办法再在上传后获取到本地文
  • 20个简洁的 JS 代码片段

    20个简洁的 JS 代码片段 1 单行 If Else 语句 这是许多编程语言的共同特征 你可以使用三元运算符用一行代码编写整个语句 而不是在多行上编写 if else 例如 const age 12 let ageGroup LONG F
  • proteus8.9仿真闪退怎么解决?如何找到ProgramData?

    proteus8 9仿真闪退 将C Program Files x86 Labcenter Electronics Proteus 8 Professional 中MODELS文件夹复制到C ProgramData Labcenter El
  • 线性代数---之正交向量

    转载 百度百科 正交向量 编辑 本词条由 科普中国 百科科学词条编写与应用工作项目审核 正交向量 是一个数学术语 指点积为零的两个或多个向量 几何向量的概念在 线性代数中经由抽象化 得到更一般的向量概念 此处向量定义为 向量空间的元素 要注
  • 【计算机视觉

    文章目录 一 检测相关 11篇 1 1 Follow Anything Open set detection tracking and following in real time 1 2 YOLO MS Rethinking Multi
  • 【分治法】中位数问题和Gray码问题——武汉理工大学算法分析与设计课程实验

    i 中位数问题 问题描述 设X 0 n 1 和Y 0 n 1 为两个数组 每个数组中含有n个已排好序的数 找出X和Y的2n个数的中位数 编程任务 利用分治策略试设计一个O log n 时间的算法求出这2n个数的中位数 数据输入 由文件inp
  • sublime text添加install package报错 Package Control There are no packages available for installation

    sublime text在使用插件之前 需要安装Package Control插件 但在安装时报错 There are no packages available for installation 也就是说无法获取安装所需的包 首先确认网络
  • 基于java项目 服务器远程debug开启教程

    首先 在我们的工作中避免不了进行远程调试 我们可以通过远程debug的方式去调试我们的程序代码 通常我们的spring项目打成包的方式有jar 或者war包发布到我们的远程服务器上 我们先介绍第一种jar包方式开启远程debug 打成jar
  • JAVA 面向对象

    第五章 面向对象 面向对象技术利用对现实世界中对象的抽象和对象之间相互关联及相互作用的描述来对现实世界进行模拟 并且使其映射到目标系统中 其以基本对象模型为单位 将对象内部处理细节封装在模型内部 重视对象模块间的接口联系和对象与外部环境间的
  • 关于GRE over IPsec及IPsec over GRE

    GRE over IPsec IPsec over GRE IPSec Over GRE是先ipsec后gre 这种我没用过 GRE Over IPSec 是先gre后ipsec 也就是说ipsec是最后的承载方式 一般常用的就是这种 解决
  • 最详细的Python安装教程

    最详细的Python安装教程 一 进入Python官网首页 下载最新的Python版本 https www python org downloads 选择最新的Python3 10 5 下载64位的版本 二 下载完成后 进行安装 1 双击P
  • 数字图像处理(入门篇)六 图像数据预处理之坐标变化

    目录 1 平移 2 镜像 3 旋转 4 缩放 图像的坐标变换又称为图像的几何计算 常见的基本变换包括 平移 旋转 镜像和缩放等等 1 平移 1 代码 使用OpenCV仿射变换函数 cv2 warpAffine 实现平移操作 import n