Cet article décrit le python3 + OpenCV2 obtenir l' image des transformations géométriques (traduction, mise en miroir, mise à l' échelle, la rotation, affines), Xiao Bian se sentent très bon, maintenant tout le monde à part, mais aussi d'être une référence. Venez voir, de suivre les petites séries ensemble
Avant - propos
. Résumer quelques notes sur l' image OpenCV transformation géométrique lu récemment
cette oeuvre est:
1. Traduction
import cv2
import numpy as np
img = cv2.imread("image0.jpg", 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
dst = np.zeros(imgInfo, np.uint8)
for i in range( height ):
for j in range( width - 100 ):
dst[i, j + 100] = img[i, j]
cv2.imshow('image', dst)
cv2.waitKey(0)
démo est très simple, l'image est décalée par 100 pixels à droite sur la figure:
2. Miroir
import cv2
import numpy as np
img = cv2.imread('image0.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height= imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]
dst = np.zeros([height*2, width, deep], np.uint8)
for i in range( height ):
for j in range( width ):
dst[i,j] = img[i,j]
dst[height*2-i-1,j] = img[i,j]
for i in range(width):
dst[height, i] = (0, 0, 255)
cv2.imshow('image', dst)
cv2.waitKey(0)
effet qui génère une démo:
3. Zoom
import cv2
img = cv2.imread("image0.jpg", 1)
imgInfo = img.shape
print( imgInfo )
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
# 1 放大 缩小 2 等比例 非等比例
dstHeight = int(height * 0.5)
dstWeight = int(width * 0.5)
# 最近邻域插值 双线性插值 像素关系重采样 立方插值
dst = cv2.resize(img, (dstWeight,dstHeight))
print(dst.shape)
cv2.imshow('image', dst)
cv2.waitKey(0)
Utilisez redimensionne opération de mise à l'échelle directe, mais peut également être mise à l'échelle en utilisant la méthode d'interpolation voisin, comme suit:
# 1 info 2 空白模板 3 重新计算x, y
import cv2
import numpy as np
img = cv2.imread('image0.jpg', 1)
imgInfo = img.shape # 先高度,后宽度
height = imgInfo[0]
width = imgInfo[1]
dstHeight = int(height/2)
dstWidth = int(width/2)
dstImage = np.zeros([dstHeight, dstWidth, 3], np.uint8)
for i in range( dstHeight ):
for j in range(dstWidth):
iNew = i * ( height * 1.0 / dstHeight )
jNew = j * ( width * 1.0 / dstWidth )
dstImage[i,j] = img[int(iNew),int(jNew)]
cv2.imshow('image', dstImage)
cv2.waitKey(0)
4. Faire pivoter
import cv2
img = cv2.imread('image0.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height= imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]
# 定义一个旋转矩阵
matRotate = cv2.getRotationMatrix2D((height*0.5, width*0.5), 45, 0.7) # mat rotate 1 center 2 angle 3 缩放系数
dst = cv2.warpAffine(img, matRotate, (height, width))
cv2.imshow('image',dst)
cv2.waitKey(0)
La rotation nécessité de définir une matrice de rotation, cv2.getRotationMatrix2D (), les paramètres 1: 2 a besoin d' un point central de rotation des paramètres: angle de rotation requis de trois paramètres: le taux de zoom requis résultats comme indiqué:
5. affine
import cv2
import numpy as np
img = cv2.imread('image0.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height= imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]
# src 3 -> dst 3 (左上角, 左下角,右上角)
matSrc = np.float32([[0,0],[0,height-1],[width-1, 0]]) # 需要注意的是 行列 和 坐标 是不一致的
matDst = np.float32([[50,50],[100, height-50],[width-200,100]])
matAffine = cv2.getAffineTransform(matSrc,matDst) #mat 1 src 2 dst 形成组合矩阵
dst = cv2.warpAffine(img, matAffine,(height, width))
cv2.imshow('image',dst)
cv2.waitKey(0)
Trois coordonnées nécessaires pour déterminer la matrice d'image, et ( en haut à gauche, en bas à gauche, en haut à droite). Les coordonnées de trois points définissent deux matrices, matSrc de l'image originale, les coordonnées affines matDst de trois points est effectuée par CV2 . .getAffineTransform () combinés pour former un effet de matrice est la suivante: le
contenu de plus de combien, et enfin de recommander une bonne réputation dans le nombre d'institutions publiques [programmeurs], il y a beaucoup de voitures anciennes compétences d' apprentissage, l' expérience d' apprentissage, les techniques d'entrevue, l' expérience en milieu de travail et d' autres part, plus nous avons soigneusement préparé les informations d' introduction à base zéro, des informations sur des projets réels, le calendrier doit expliquer la technologie de programmation Python tous les jours, partager des méthodes d'apprentissage et la nécessité de faire attention aux petits détails