OpenCV开发教程之图像基本变换(平移、缩放、翻转、旋转、倾斜)

9人浏览 / 0人评论 / 添加收藏

今天小编主要介绍如何通过OpenCV来实现图像的基本变换操作:平移、旋转、缩放和倾斜。我们话不多说,直接上干货。

1、平移

#图像平移
import cv2
import numpy as np
from opencv_jupyter_ui import cv2_imshow
#导入图片
dog = cv2.imread('./images/dog.png')
h, w = dog.shape[:2]
M = np.float32([[1, 0, 100], [0, 1, 50]])  # 向右平移 100 像素,向下平移 50 像素
translated_img = cv2.warpAffine(dog, M, (w+100, h+50))
cv2_imshow('dog',dog)
cv2_imshow('translated_img',translated_img)

 

 2、缩放

import cv2

import numpy as np

from opencv_jupyter_ui import cv2_imshow

#导入图片

dog=cv2.imread('./images/dog.png')

#缩小为原来的一半

new_dog=cv2.resize(dogdsize=Nonefx=0.5fy=0.5interpolation=cv2.INTER_LINEAR)

cv2_imshow('new_dog',new_dog)

cv2_imshow('dog',dog)

3、翻转

#图像的翻转

# flip(src, flipCode)

# flipCode =0表示上下翻转

# flipCode >0表示左右翻转

# flipCode <0上下+左右

#翻转

import cv2

import numpy as np

from opencv_jupyter_ui import cv2_imshow

#导入图片

dog=cv2.imread('./images/dog.png')

new_dog1=cv2.flip(dogflipCode=0)

new_dog2=cv2.flip(dogflipCode=1)

new_dog3=cv2.flip(dogflipCode=-1)

new_dog=dog[::-1,::-1]

cv2_imshow('dog',dog)

cv2_imshow('dog1',np.hstack((new_dog1,new_dog2)))

cv2_imshow('dog2',np.hstack((new_dog3,new_dog)))

4、旋转

# 图像旋转
import cv2
import numpy as np
from opencv_jupyter_ui import cv2_imshow
#导入图片
dog = cv2.imread('./images/dog.png')
(h, w) = dog.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, 45, 1.0)  # 旋转 45 度
rotated_img = cv2.warpAffine(dog, M, (w, h))
cv2_imshow('rotated_img',rotated_img)

 

5、倾斜

# 图像倾斜
# OpenCV需要定位图像的三个点来计算倾斜效果,这三个点分别是左上角 右上角和左下角,这样可以保证图像的平直性和平行性
# 同样有getAffineTransform方法来自动计算倾斜图像的M矩阵
# M=cv2.getAffineTransform(src,dst)
# src 原图三个点的坐标 格式为三行两列的浮点数列表
# dst 倾斜图像的三个点坐标 格式与src一样
import cv2
import numpy as np
from opencv_jupyter_ui import cv2_imshow
img = cv2.imread("./images/dog.png")  # 读取图像
rows = len(img)  # 图像像素行数
cols = len(img[0])  # 图像像素列数
p1 = np.zeros((3, 2), np.float32)  # 32位浮点型空列表,原图三个点
p1[0] = [0, 0]  # 左上角点坐标
p1[1] = [cols - 1, 0]  # 右上角点坐标
p1[2] = [0, rows - 1]  # 左下角点坐标
p2 = np.zeros((3, 2), np.float32)  # 32位浮点型空列表,倾斜图三个点
p2[0] = [50, 0]  # 左上角点坐标,向右挪50像素
p2[1] = [cols - 1, 0]  # 右上角点坐标,位置不变
p2[2] = [0, rows - 1]  # 左下角点坐标,位置不变
M = cv2.getAffineTransform(p1, p2)  # 根据三个点的变化轨迹计算出M矩阵
dst = cv2.warpAffine(img, M, (cols, rows))  # 按照M进行仿射
cv2_imshow('img', np.hstack((img, dst))) # 显示原图和显示仿射变换效果图

全部评论