opencv-图片几何变换

原始图片:

图片缩放一

import cv2  # 导入cv库
img = cv2.imread('image1.jpg',1) # 读取图片文件, 1:彩色, 0:灰色
imgInfo = img.shape # 获取图片的维度
print(imgInfo)
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
# 1 放大 缩小 2 等比例 非 2:3
dstHeight = int(height*0.5)
dstWidth = int(width*0.5)
#最近临域插值 双线性插值 像素关系重采样 立方插值
dst = cv2.resize(img,(dstWidth,dstHeight))
#cv2.imshow('image',dst)
cv2.imwrite('resize_image.jpg',dst)

图片缩放二

import cv2 # 导入cv库
import numpy as np
img = cv2.imread('image1.jpg',1) # 读取图片文件, 1:彩色, 0:灰色
#cv2.imshow('src',img)
imgInfo = img.shape # 获取图片的维度
height = imgInfo[0]
width = imgInfo[1]
matScale = np.float32([[0.5,0,0],[0,0.5,0]]) # 定义缩放矩阵
dst = cv2.warpAffine(img,matScale,(int(width/2),int(height/2))) # 原始数据,缩放矩阵,目标的宽高信息
cv2.imwrite('warp_image.jpg',dst)

图片剪切

import cv2  # 导入cv库
img = cv2.imread('image1.jpg',1) # 读取图片文件, 1:彩色, 0:灰色
#imgInfo = img.shape
print(img.shape)
dst = img[100:600,250:800] # 获取宽度100-600, 高度250-800的图像

cv2.imwrite('cut_image.jpg',dst)

图片镜像

import cv2 # 导入cv库
import numpy as np
img = cv2.imread('image1.jpg',1) # 读取图片文件, 1:彩色, 0:灰色
cv2.imshow('src',img)
imgInfo = img.shape # 获取图片的维度
height = imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]
newImgInfo = (height*2,width,deep) # 新图片的维度
dst = np.zeros(newImgInfo,np.uint8)#uint8 # 目标图片的数据维度
# 刷新图片的数据
for i in range(0,height):
for j in range(0,width):
dst[i,j] = img[i,j]
#x y = 2*h - y -1
dst[height*2-i-1,j] = img[i,j]
for i in range(0,width): # 添加分割线
dst[height,i] = (0,0,255)#BGR
cv2.imshow('dst',dst)

图片旋转

import cv2 # 导入cv库
import numpy as np
img = cv2.imread('image1.jpg',1) # 读取图片文件, 1:彩色, 0:灰色
cv2.imshow('src',img)
imgInfo = img.shape # 获取图片的维度
height = imgInfo[0]
width = imgInfo[1]
# 2*3 定义旋转矩阵--旋转的中心点,旋转的角度, 缩放系数
matRotate = cv2.getRotationMatrix2D((height*0.5,width*0.5),45,1)# mat rotate 1 center 2 angle 3 scale
#100*100 25
dst = cv2.warpAffine(img,matRotate,(height,width)) # 仿射方法
#cv2.imshow('dst',dst)
cv2.imwrite('rotate_image.jpg',dst)

图片仿射变换

import cv2 # 导入cv库
import numpy as np
img = cv2.imread('image1.jpg',1) # 读取图片文件, 1:彩色, 0:灰色
cv2.imshow('src',img)
imgInfo = img.shape # 获取图片的维度
height = imgInfo[0]
width = imgInfo[1]
#src 3->dst 3 (左上角 左下角 右上角)
matSrc = np.float32([[0,0],[0,height-1],[width-1,0]]) # 获取原图片三个点坐标
matDst = np.float32([[50,50],[300,height-200],[width-300,100]]) # 三个点的新坐标
#把两个矩阵组合
matAffine = cv2.getAffineTransform(matSrc,matDst) # 获取矩阵的组合,
dst = cv2.warpAffine(img,matAffine,(width,height)) # 仿射变换方法
#cv2.imshow('dst',dst)
cv2.imwrite('aft_image.jpg',dst)

------ 本文结束 🎉🎉 谢谢观看 ------
0%