opencv-python小课堂-day-04

# 图像的放大与缩小
# resize
# interpolation: 插值算法, 主要有以下几种:

# - INTER_NEAREST, 邻近插值, 速度快, 效果差.
# - INTER_LINEAR, 双线性插值,  使用原图中的4个点进行插值. 默认.
# - INTER_CUBIC, 三次插值, 原图中的16个点.
# - INTER_AREA, 区域插值, 效果最好, 计算时间最长.
import cv2 as cv 
import numpy as np

dog = cv.imread("./dog.jpeg")
    
#  x,y放大一倍
dog_big = cv.resize(dog,dsize=(800,800),interpolation = cv.INTER_NEAREST)

cv.imshow("img",dog_big)
cv.waitKey(0)
cv.destroyAllWindows()
# 图像的翻转
# flip(scr,flipCode)
# - flipCode =0 表示上下翻转
# - flipCode >0 表示左右翻转
# - flipCode  <0 上下 + 左右.


# 翻转
import cv2
import numpy as np

#导入图片
dog = cv2.imread('./dog.jpeg')

new_dog = cv2.flip(dog, flipCode=-1)
cv2.imshow('dog', new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
# rotate(img, rotateCode)

# - ROTATE_90_CLOCKWISE 90度顺时针
# - ROTATE_180 180度
# - ROTATE_90_COUNTERCLOCKWISE 90度逆时针

import cv2
import numpy as np

#导入图片
dog = cv2.imread('./dog.jpeg')

new_dog = cv2.rotate(dog, cv.ROTATE_180)
cv2.imshow('dog', new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 仿射变换
# warpAffine:
import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')
h,w,c = dog.shape
M = np.float32([[1,0,100],[0,1,0]])
new = cv.warpAffine(dog,M,(w,h))
cv2.imshow('dog', new)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 仿射变换的难点就是计算变换矩阵, OpenCV提供了计算变换矩阵的API
# 得到旋转矩阵
# getRotationMatrix2D
import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')

h, w, ch = dog.shape
# M = np.float32([[1, 0, 100], [0, 1, 0]])

# 注意旋转的角度为逆时针.
# M = cv2.getRotationMatrix2D((100, 100), 15, 1.0)
# 以图像中心点旋转
M = cv2.getRotationMatrix2D((w/2, h/2), 15, 1.0)
# 注意opencv中是先宽度, 再高度
new = cv2.warpAffine(dog, M, (w, h))

cv2.imshow('new', new)
cv2.waitKey(0)
cv2.destroyAllWindows()
# getAffineTransform(src[], dst[]) 通过三点可以确定变换后的位置, 相当于解方程, 3个点对应三个方程, 能解出偏移的参数和旋转的角度.
# - src原目标的三个点
# - dst对应变换后的三个点
# 通过三个点来确定M
# 仿射变换之平移
import cv2
import numpy as np

#导入图片
dog = cv2.imread('./dog.jpeg')

h, w, ch = dog.shape

# 一般是横向和纵向的点, 所以一定会有2个点横坐标相同, 2个点纵坐标相同
src = np.float32([[200, 100], [300, 100], [200, 300]])
dst = np.float32([[100, 150], [360, 200], [280, 120]])
M = cv2.getAffineTransform(src, dst)
# 注意opencv中是先宽度, 再高度
new = cv2.warpAffine(dog, M, (w, h))

cv2.imshow('new', new)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 透视变换就是将一种坐标系变换成另一种坐标系. 简单来说可以把一张"斜"的图变"正".
# warpPerspective(img, M, dsize,....)
# 对于透视变换来说, M是一个3 * 3 的矩阵.
# getPerspectiveTransform(src, dst) 获取透视变换的变换矩阵, 需要4个点, 即图片的4个角. 

# 透视变换
import cv2
import numpy as np

#导入图片
img = cv2.imread('./123.png')
print(img.shape)

src = np.float32([[100, 1100], [2100, 1100], [0, 4000], [2500, 3900]])
dst = np.float32([[0, 0], [2300, 0], [0, 3000], [2300, 3000]])
M = cv2.getPerspectiveTransform(src, dst)

new = cv2.warpPerspective(img, M, (2300, 3000))
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
cv2.resizeWindow('img', 640, 480)

cv2.namedWindow('new', cv2.WINDOW_NORMAL)
cv2.resizeWindow('new', 640, 480)

cv2.imshow('img', img)
cv2.imshow('new', new)


cv2.waitKey(0)
cv2.destroyAllWindows()
# 透视变换

import cv2 as cv
import numpy as np

img = cv.imread("./dog.jpeg")

# 透视变换就是把角度摆正
# 先得到透视变换的变换矩阵
# 首先确定四个点,就是摆正后的四个角点的坐标

# 1-原图坐标
scr = np.float32([[100, 1100], [2100, 1100], [0, 4000], [2500, 3900]])
# 2-摆正坐标
dst = np.float32([[0, 0], [2300, 0], [0, 3000], [2300, 3000]])
# 3-创建透视变换矩阵
M = cv.getPerspectiveTransform(scr,dst)

# 创建透视变换
img = cv.warpPerspective(img,M,dsize = [2300,2000])
cv.imshow("img",img)
cv.waitKey(0)
cv.destroyAllWindows()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值