当前位置: 首页 > news >正文

opencv 对图片的操作

对图片的操作

  • 1.图片镜像旋转(cv2.flip())
  • 2 图像的矫正

1.图片镜像旋转(cv2.flip())

图像的旋转是围绕一个特定点进行的,而图像的镜像旋转则是围绕坐标轴进行的。图像的镜像旋转分为水平翻转、垂直翻转、水平垂直翻转三种。

水平翻转就是将图片的像素点沿y轴翻转,具体到像素点来说就是令其坐标从(x,y)翻转为(-x,y)。

垂直翻转就是将图片的像素点沿x轴翻转,具体到像素点来说就是其坐标从(x,y)翻转为(x,-y)

水平垂直翻转就是水平翻转和垂直翻转的结合,具体到像素点来说就是其坐标从(x,y)翻转为(-x,-y)。用公式表示为:
在这里插入图片描述

由图像的旋转我们知道,图像在旋转的时候需要有旋转中心,而图像的镜像旋转虽然都是围绕x轴和y轴进行旋转,但是我们也需要确定x轴和y轴的坐标。在OpenCV中,图片的镜像旋转是以图像的中心为原点进行镜像翻转的。也就是说,水平翻转时,图像的左侧和右侧会关于中心点进行交换,垂直翻转时,图像的上侧和下侧会关于中心点进行交换。
代码格式如下:

cv2.flip(img,flipcode)

参数如下:

  • img:要旋转的图
  • flipcode:沿着哪个轴旋转

在本实验中,图片镜像旋转组件里的参数flipcode有三个选择:

  • 0:垂直翻转
  • 大于0:水平翻转
  • 小于0:水平垂直翻转
    代码如下:
    '''图片的镜像旋转'''img=cv2.imread(f'../15day4.10/src/1.jpg')#图像垂直镜像旋转img_v=cv2.flip(img,0)#图像水平镜像旋转img_h=cv2.flip(img,1)#图像水平垂直镜像旋转img_vh=cv2.flip(img,-1)cv2.imshow("img",img)cv2.imshow("imgv",img_v)cv2.imshow("imgh",img_h)cv2.imshow("imgvh",img_vh)cv2.waitKey(0) 

在这里插入图片描述

2 图像的矫正

而OpenCV里也提供了getPerspectiveTransform()函数用来生成该3*3的透视变换矩阵。

getPerspectiveTransform(src,dst)

在该函数中,需要提供两个参数:

src:原图像上需要进行透视变化的四个点的坐标,这四个点用于定义一个原图中的四边形区域。

dst:透视变换后,src的四个点在新目标图像的四个新坐标。

该函数会返回一个透视变换矩阵,得到透视变化矩阵之后,使用warpPerspective()函数即可进行透视变化计算,并得到新的图像。该函

cv2.warpPerspective(src, M, dsize, flags, borderMode)

数需要提供如下参数:

src:输入图像。

M:透视变换矩阵。这个矩阵可以通过getPerspectiveTransform函数计算得到。

dsize:输出图像的大小。它可以是一个Size对象,也可以是一个二元组。视口

flags:插值方法的标记。

borderMode:边界填充的模式。
代码如下:

'''图像的矫正-'''img=cv2.imread(r"../15day4.10/src/3.png")h,w,c=img.shapepts1=np.float32(([178,100],[487,134],[124,267],[473,308]))# 原图像里面想要内容四个角的坐标pts2=np.float32(([0,0],[w,0],[0,h],[w,h])) #透视变换后在二维的坐标#获取透视变换矩阵m=cv2.getPerspectiveTransform(pts1,pts2)# 获取变换后的图像img2=cv2.warpPerspective(img,M=m,dsize=(w,h))cv2.imshow("img",img)cv2.imshow("img2",img2)cv2.waitKey(0) 

在这里插入图片描述

相关文章:

  • .NET 8 升级 .NET Upgrade Assistant
  • 逻辑回归(Logistic Regression)
  • IDEA/WebStorm中Git操作缓慢的解决方案
  • UDP协议详解
  • 学习笔记(C++篇)--- Day 3
  • 今日行情明日机会——20250421
  • 数据结构第六章(五)-拓扑排序、关键路径
  • JavaScript数据结构与算法实战: 探秘Leetcode经典题目
  • Android 中实现 GIF 图片动画
  • DeepSeek R1模型微调怎么做?从入门到实战
  • CFIS-YOLO:面向边缘设备的木材缺陷检测轻量级网络解析
  • 经典文献阅读之--Kinematic-ICP(动态优化激光雷达与轮式里程计融合)
  • 从C语言变量看内存
  • LX3-初识是单片机
  • java集合框架day1————集合体系介绍
  • mongodb 存储数据的具体实现方式
  • 基于SpringBoot的篮球联盟管理系统(源码+数据库+万字文档)
  • 如何开发一套TRS交易系统:架构设计、核心功能与风险控制
  • 第十三讲、isaaclab中修改工作流的RL环境
  • CCF CSP 第37次(2025.03)(1_数值积分_C++)
  • 服务业扩大开放,金融、医疗等多领域明确155项试点任务
  • 特朗普亲自介入美日关税谈判:以势压人还是给对手“送助攻”
  • 人大书报资料中心与中科院文献中心共筑学科融合创新平台
  • 俄官员称乌克兰未遵守停火,乌方暂无回应
  • 五一假期出行预订进入高潮:酒店搜索热度翻倍,“请4休11”拼假带动长线游
  • 瑞安房地产王颖:房地产市场看到很好的信号,上海项目销售压力不大