OpenCV图像变换

一 图像的缩放

resize(src,dst,dsize,fx,fy,interpolation)
fx:x轴的缩放因子
fy:y轴的缩放因子
interpolation 插值算法

INTER_NEAREST,临近插值,速度快,效果差
INTER_LINEAR,双线性插值,原图中的4个点
INTER_CUBIC 三次插值,原图中的16个点
INTER_AREA 效果最好

import cv2
import numpy as np

girl=cv2.imread('./2037548.jpg')

new=cv2.resize(girl,(800,600))

cv2.imshow('scale',new)

cv2.waitKey(0)

二 图像翻转

flip(img,flipCode)
flipCode==0 上下
flipCode>0 左右
flipCode<0 上下+左右
import cv2
import numpy as np

girl=cv2.imread('./2037551.jpg')

new=cv2.flip(girl,0)

cv2.imshow('girl',new)

cv2.waitKey(0)

三 图像旋转

rotate(img,rotateCode)
ROTATE_90_CLOCKWISE)
ROTATE_180
ROTATE_90_COUNTERCLOCKWISE
import cv2
import numpy as np

girl=cv2.imread('./2037551.jpg')

new =cv2.rotate(girl,cv2.ROTATE_90_CLOCKWISE)

cv2.imshow('girl',new)

cv2.waitKey(0)

四 仿射变换之图像平移

仿射变换是图像旋转、缩放、平移的总称。

1 仿射API

warpAffine(src,M,dsie,flags,mode,value)
M:变换矩阵
dsize输出尺寸大小
flag:与resize中插值算法一致
Mode:边界外推法标志
value:填充边界的值

2 平移矩阵

矩阵中的每个像素由(x,y)组成。
因此,其变换矩阵是2X2的矩阵。
平移向量为2x1的向量,所在平移矩阵为2x3矩阵。

import cv2
import numpy as np

girl=cv2.imread('./2037551.jpg')
M=np.float32([[1,0,100],[0,1,100]])
h,w,ch=girl.shape

new=cv2.warpAffine(girl,M,(w,h))

cv2.imshow('girl',girl)
cv2.imshow('newgirl',new)
cv2.waitKey(0)

五 仿射变换之获取变换矩阵

getRotationMatrix2D(center,angle,scale)
center中心点
angle角度
scale缩放比例
import cv2
import numpy as np

girl=cv2.imread('./2037551.jpg')
h,w,ch=girl.shape
# 旋转的角度为逆时针
# 中心点(x,y)
M=cv2.getRotationMatrix2D((w/2,h/2),15,1.0)
# 如果想改变新图形的尺寸,需要修改dsize
new=cv2.warpAffine(girl,M,(int(w/2),int(h/2)))

cv2.imshow('girl',girl)
cv2.imshow('new',new)
cv2.waitKey(0)

六 仿射变化之变换矩阵之二

变换矩阵(二)
在这里插入图片描述

getAffineTransform(src[],dst[])
通过三个点可以确定变换的位置
import cv2
import numpy as np

girl=cv2.imread('./2037551.jpg')
h,w,ch=girl.shape
src=np.float32([[400,300],[800,300],[400,1000]])
dst=np.float32([[200,400],[600,500],[150,1100]])
M=cv2.getAffineTransform(src,dst)

new=cv2.warpAffine(girl,M,(w,h))

cv2.imshow('girl',girl)
cv2.imshow('new',new)
cv2.waitKey(0)

七 OpenCV透视变换

透视变换API

warpPerspective(img,M,dsize,..)
M是边变换矩阵
dsize是目标图像大小
getPersectiveTransform(src,dst)
四个点(图形的四个角)
import cv2
import numpy as np

img=cv2.imread('./2037551.jpg')
src=np.float32([[100,1100],[2100,1100],[0,400],[2500,2900]])
dst=np.float32([[0,0],[2300,0],[0,3000],[2300,3000]])
M=cv2.getPerspectiveTransform(src,dst)
cv2.warpPerspective(img,M,(2300,3000))

new=cv2.warpPerspective(img,M,(2300,3000))

cv2.imshow('orgin',img)
cv2.imshow('new',new)
cv2.waitKey(0)
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV库提供了多种图像变换的功能。以下是一些常见的图像变换操作: 1. 平移(Translation):通过指定平移矩阵来移动图像的位置。 ```python import cv2 import numpy as np image = cv2.imread('image.jpg') height, width = image.shape[:2] # 定义平移矩阵 translation_matrix = np.float32([[1, 0, 100], [0, 1, 50]]) # 应用平移矩阵 translated_image = cv2.warpAffine(image, translation_matrix, (width, height)) ``` 2. 旋转(Rotation):通过指定旋转角度和旋转中心来旋转图像。 ```python import cv2 import numpy as np image = cv2.imread('image.jpg') height, width = image.shape[:2] rotation_angle = 45 # 计算旋转中心 rotation_center = (width // 2, height // 2) # 定义旋转矩阵 rotation_matrix = cv2.getRotationMatrix2D(rotation_center, rotation_angle, 1.0) # 应用旋转矩阵 rotated_image = cv2.warpAffine(image, rotation_matrix, (width, height)) ``` 3. 缩放(Scaling):通过指定缩放比例来改变图像的大小。 ```python import cv2 image = cv2.imread('image.jpg') resized_image = cv2.resize(image, None, fx=0.5, fy=0.5) ``` 4. 翻转(Flip):可以进行水平、垂直或同时进行水平和垂直的图像翻转。 ```python import cv2 image = cv2.imread('image.jpg') flipped_image = cv2.flip(image, -1) # 水平和垂直翻转 ``` 5. 透视变换(Perspective Transformation):通过指定源图像上的四个点和目标图像上的对应点来进行透视变换。 ```python import cv2 import numpy as np image = cv2.imread('image.jpg') # 定义源图像和目标图像上的四个点 source_points = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]]) target_points = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]]) # 计算透视变换矩阵 perspective_matrix = cv2.getPerspectiveTransform(source_points, target_points) # 应用透视变换矩阵 perspective_transformed_image = cv2.warpPerspective(image, perspective_matrix, (300, 300)) ``` 这些是一些常见的图像变换操作,OpenCV还提供了其他更高级的变换技术,如仿射变换图像扭曲等。你可以根据具体需求选择适合的图像变换方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值