pitón programación básica: OpenCV2 geométrica transformación de la imagen (traducción, reflejo, escala, rotación, afín)

En este artículo se describe la python3 + OpenCV2 lograr transformaciones geométricas imagen (traducción, lo que refleja, escala, rotación, afín), Xiao Bian siento muy bien, ahora para que todos puedan compartir, sino también para ser una referencia. Venir a ver, seguir las pequeñas series juntas
Prólogo

. Resumir algunas notas sobre la imagen OpenCV transformación geométrica recientemente leer
esta obra de arte es: Aquí Insertar imagen Descripción
1. Traducción

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)

demo es muy simple, la imagen se desplaza por 100 píxeles a la derecha en la figura:
Aquí Insertar imagen Descripción
2. Espejo

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)

efecto que genera una demo: Aquí Insertar imagen Descripción
3. Ampliar

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)

Uso cambiar el tamaño de la operación directa de escala, sino que también se puede escalar usando el método de interpolación vecino, de la siguiente manera:

# 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. Girar

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)

Rotación necesidad de definir una matriz de rotación, cv2.getRotationMatrix2D (), los parámetros 1: 2 requiere un punto de centro de rotación de los parámetros: ángulo de rotación requiere tres parámetros: la relación de zoom requiere resultados como se muestra: Aquí Insertar imagen Descripción
5. afín

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)

Tres coordenadas necesarias para determinar la matriz de la imagen, y (arriba izquierda, inferior izquierda, superior derecha). Coordenadas de tres puntos definen dos matrices, matSrc de la imagen original, matDst coordenadas afines de tres puntos se lleva a cabo por cv2 . .getAffineTransform () se combinaron para formar un efecto de la matriz es la siguiente: Aquí Insertar imagen Descripción
el contenido en más de cuántos, y finalmente a recomendar una buena reputación en el número de instituciones públicas [programadores], hay una gran cantidad de veteranos habilidades de aprendizaje, la experiencia de aprendizaje, habilidades de la entrevista, la experiencia laboral y otra acción, tanto más hemos preparado cuidadosamente la basada en cero información introductoria, información sobre proyectos reales, el tiempo tiene que explicar la tecnología programador Python todos los días, compartir algunos métodos de aprendizaje y la necesidad de prestar atención a los pequeños detallesAquí Insertar imagen Descripción

Publicado 35 artículos originales · ganado elogios 1 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/chengxun02/article/details/105029488
Recomendado
Clasificación