OpenCV-6之图像的几何变换

图像的几何变换在图像处理中十分重要,尤其是腐蚀膨胀,可以把一些不重要的信息过滤掉。

1、仿射变换

1.1 仿射变换可以理解为线性变换:放大、缩小、移动、旋转等。
1.2 矩阵的线性变换:只要乘上另一个矩阵就可以变换过去。
注:有些变换并不是一步到位,因此需要找到变换矩阵。
1.3 变换矩阵说明
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.4 代码

import cv2

src = cv2.imread('img/1.jpg')
rows, cols, channel = src.shape

# 最后一个[0, 0, 1]被省略
# M = np.float32([[1, 0, 20], [0, 1, 50]])  # x平移20,y平移50
# M = np.float32([[0.2, 0, 0], [0, 0.5, 0]])  # w缩放到0.2,h缩放到0.5
# M = np.float32([[-0.5, 0, cols // 2], [0, 0.5, 0]])  # w=-0.5,左右镜像,w缩放一半;h=0.5,h缩放一半;x方向移动cols//2
# M = np.float32([[1, 0.2, 0], [0.2, 1, 0]])

M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 45, 0.7)
dst = cv2.warpAffine(src, M, (cols, rows))

cv2.imshow('src pic', src)
cv2.imshow('dst pic', dst)

cv2.waitKey(0)

2、透视变换

2.1 透视变换不是线性变换,很多成像的变换都是透视变换
2.2 应用:扭曲的图片拉平
2.3代码

import cv2
import numpy as np

img = cv2.imread("img/2.jpg")

# 三个、四个 或者 五个角当前坐标位置
pts1 = np.float32([[25, 30], [179, 25], [12, 188], [189, 190]])
# 变换后的坐标位置
pts2 = np.float32([[0, 0], [200, 0], [0, 200], [200, 200]])

# 获得变换矩阵
M = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(img, M, (200, 200))

cv2.imshow("src", img)
cv2.imshow("dst", dst)

cv2.waitKey(0)

在这里插入图片描述

3、膨胀、腐蚀

3.1 膨胀:必须是二值图;白色区域膨胀

import cv2 as cv

img = cv.imread("img/3.jpg", 0)
kernel = cv.getStructuringElement(cv.MORPH_RECT, ksize=(3, 3))
dst = cv.dilate(img, kernel)  # 膨胀

在这里插入图片描述
3.2 腐蚀:必须是二值图,白色区域缩小。

import cv2 as cv

img = cv.imread("img/3.jpg", 0)
kernel = cv.getStructuringElement(cv.MORPH_RECT, ksize=(3, 3))
dst = cv.erode(img, kernel) #腐蚀

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值