OpenCv图像基本变换

目录

一、图像翻转

二、图像旋转

三、仿射变换之平移

四、仿射变换之获取变换矩阵

五、仿射变换之透视变换


一、图像翻转

图像翻转不等同于旋转,类似于一些视频的拍摄,拍摄后实际是左右颠倒的,通过图像翻转可进行还原

案例代码如下:

# 图片翻转
filpCode = 0表示上下翻转
flipCode > 0表示左右翻转
flipCOde < 0表示上下+左右翻转
new_first = cv2.flip(first,flipCode=-1)

二、图像旋转

函数原型:

rotate(img,rotateCode)

案例代码如下:

# 图片旋转
ROTATE_90_CLOCKWISE 90度顺时针
ROTATE_180 180度
ROTATE_90_COUNTERCLOCKWISE 90度逆时针

new_first = cv2.rotate(first,rotateCode= cv2.ROTATE_90_COUNTERCLOCKWISE)
# 展示图片
cv2.imshow('first',new_first)

三、仿射变换之平移

函数原型:

warpAffine(src,M,dsize,flags,mode,value)

  • M:变换矩阵
  • dsize:输出尺寸大小
  • flags:与size中的插值算法一致
  • mode:边界外推法标志
  • value:填充边界的值

案例代码如下:

# 读取图片
first = cv2.imread('5.jpg')

h,w,ch = first.shape

# 右移200个单位
# 变换矩阵(最少为float32位)
M = np.float([[1,0,200],[0,1,0]])

# 平移操作
# 注意opencv中先宽度,后高度
new_first = cv2.warpAffine(first,M,dsize=(w,h))

cv2.imshow('new_first',new_first)

四、仿射变换之获取变换矩阵

获取变换矩阵M的两种方法:

1、getRotationMatrix2D(center,angle,scale)

  • center:中心点
  • angle:旋转角度(逆时针)
  • scale:缩放比例(宽高同时缩放)

案例代码如下: 

h,w,ch = first.shape
# 获取变换矩阵(注意旋转角度为逆时针)
# M = cv2.getRotationMatrix2D((100,100),15,1.0)

# 以图像中心点旋转
M = cv2.getRotationMatrix2D((w/2,h/2),15,1.0)

new_first = cv2.warpAffine(first,M,(w,h))

2、getAffineTransform(src[],dst[])

定义:通过点对应找到变换矩阵,一般三个点就可以; 

拓展:这里可以联想到TPS算法,也是通过对应点进行变换的一种方法,二者可能有想通之处;

案例代码如下:

h,w,ch = first.shape

src = np.float32([[200,100],[300,100],[200,300]])
dst = np.float32([[100,150],[360,200],[280,120]])

# 通过三个点来确定变换矩阵
M = cv2.getAffineTransform(src,dst)
new_first = cv2.warpAffine(first,M,(w,h))

五、仿射变换之透视变换

这里用一个具体案例来介绍,例如拍照搜题的软件,当拍摄整页时会有一种书本和桌面组合的样子,经过透视变换后能更好的将想要的信息放在图像中;

仿射变换函数原型:

warpPerspective(img,M,dsize,…)

获取变换矩阵函数原型:

getPerspective(src,dst):和getAffineTransform函数比较类似,不同的是需要四个坐标点(图形四个角);
案例代码如下:

# 获取变换矩阵
# src是原图的四个坐标
# dst
src = np.float32([[100,1100],[210,110],[0,4000],[2500,3900]])
dst = np.float32([[0,0],[2300,0],[0,3000],[2500,3000]])

M = cv2.getPerspectiveTransform(src,dst)

# 透视变换
new_img = cv2.warpPerspective(img,M,(2300,3000))

cv2.imshow('new_img',new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几两春秋梦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值