Python OpenCV从入门到精通——第八章——图像的阈值处理

import cv2

#           ——————————————————————————缩放
# dst = resize(src,dsize,fx,fy,interpolation)(后三个参数为可选参数) 参数依次为:缩放后图像、原始图像、图像大小(格式为元组(宽,高),单位像素)、水平方向缩放比例、垂直方向缩放比例、缩放的插值方式(对图像进行缩小或者放大时需要删减或补充像素,该参数指定方法对图像进行删减)
img = cv2.imread("demo.png")
#               ①使用dsize参数实现缩放,使用了dsize就可以不用fx,fy
dst1 = cv2.resize(img, (100, 100))                      # 按照宽100像素、高100像素的大小进行缩放
#               ②使用fx,fy参数实现缩放,dsize参数必须使用None,否则fx,fy失效
dst3 = cv2.resize(img, None, fx=1 / 3, fy=1 / 2)        # 将宽缩小到原来的1/3、高缩小到原来的1/2
cv2.imshow("img", img)
cv2.imshow("dst1", dst1)
cv2.waitKey()
cv2.destroyAllWindows()



#           ——————————————————————————翻转
# dst = cv2.flip(src,flipCode)  参数依次是:原始图像、翻转类型(为0沿x轴翻转,为正数沿y轴翻转,为负数同时沿x轴y轴翻转)
dst1 = cv2.flip(img, 0)                                 # 沿X轴翻转
dst2 = cv2.flip(img, 1)                                 # 沿Y轴翻转
dst3 = cv2.flip(img, -1)                                # 同时沿X轴、Y轴翻转
cv2.imshow("img", img)
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
cv2.imshow("dst3", dst3)
cv2.waitKey()
cv2.destroyAllWindows()



#           ——————————————————————————仿射变换
# dst = cv2.warpAffine(src,M,dsize,flags,borderMode,borderValue)  参数依次为:原始图像、2行3列矩阵(通过此矩阵变换原图中的像素位置)、输出图像尺寸大小、插值方式(可选参数)、边界值(可选参数)
# M = [[a,b,c],[q,w,e]]     :x,y即图像中块的新旧位置,通过M改变每个块的位置从而改变图像的位置
# 新x = 原x*a+原y*b+c
# 新y = 原x*q+原y*w+e
import numpy as np
#           ——————————①平移
#   M = [[1,0,水平移动的距离],[0,1,垂直移动的距离]]
rows = len(img)  # 图像像素行数
cols = len(img[0])  # 图像像素列数
M = np.float32([[1, 0, 50],[0, 1, 100]])                #横坐标向右移动50,纵坐标向下移动100像素
dst = cv2.warpAffine(img, M, (cols, rows))
#           ——————————②旋转
#   M = cv2.getRotationMatrix2D(center,angle,scale)     #参数依次是:旋转中心点坐标,旋转角度(角度),缩放比例
center = (rows / 2, cols / 2)                           # 图像的中心点
M = cv2.getRotationMatrix2D(center, 30, 0.8)            # 以图像为中心,逆时针旋转30度,缩放0.8倍
dst = cv2.warpAffine(img, M, (cols, rows))              # 按照M进行仿射
#           ——————————③倾斜(通过左上角,右上角,左下角三个点的像素位置变化计算出其他像素的位置变化)
#   M = cv2.getAffineTransform(src,dst)                 #参数依次是: 仿射矩阵,原图三个点坐标(为三行两列列表 如:[[0,1],[1,0][1,1]],倾斜图像的三个点坐标(点依次是左上的点,右上的点,左下的点)
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', img)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()



#           ——————————————————————————透视
#   dst = cv2.warpPerspective(src,M,dsize,flags,borderMode,borderValue) #参数依次为:原始图像、3行3列矩阵(通过此矩阵变换原图中的像素位置)、输出图像尺寸大小、插值方式(可选参数)、边界类型(可选参数)、边界值(可选参数)
#   M = cv2.getPrespectiveTransform(src,dst)             # 参数依次为:原图四个点坐标(4行2列列表),透视图四个点坐标(依次为左上、右上、左下、右下)
p1 = np.zeros((4, 2), np.float32)                        # 32位浮点型空列表,保存原图四个点
p1[0] = [0, 0]                                           # 左上角点坐标
p1[1] = [cols - 1, 0]                                    # 右上角点坐标
p1[2] = [0, rows - 1]                                    # 左下角点坐标
p1[3] = [cols - 1, rows - 1]                             # 右下角点坐标
p2 = np.zeros((4, 2), np.float32)                        # 32位浮点型空列表,保存透视图四个点
p2[0] = [90, 0]                                          # 左上角点坐标,向右移动90像素
p2[1] = [cols - 90, 0]                                   # 右上角点坐标,向左移动90像素
p2[2] = [0, rows - 1]                                    # 左下角点坐标,位置不变
p2[3] = [cols - 1, rows - 1]                             # 右下角点坐标,位置不变
M = cv2.getPerspectiveTransform(p1, p2)                  # 根据四个点的变化轨迹计算出M矩阵
dst = cv2.warpPerspective(img, M, (cols, rows))          # 按照M进行仿射
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()

black.png
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值