programmation de base de python: OpenCV2 transformation géométrique de l'image (translation, mise en miroir, mise à l'échelle, la rotation, affine)

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: Insérer ici l'image Description
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:
Insérer ici l'image Description
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: Insérer ici l'image Description
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é: Insérer ici l'image Description
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 Insérer ici l'image Description
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étailsInsérer ici l'image Description

Publié 35 articles originaux · a gagné les éloges 1 · vues 10000 +

Je suppose que tu aimes

Origine blog.csdn.net/chengxun02/article/details/105029488
conseillé
Classement