transformação de perspectiva opencv, extrair imagem de recurso

contente

introdução básica

Introdução ao cv2.getPerspectiveTransforms

Introdução ao cv2.warpPerspective

Encontrar imagens de recursos

Código completo e efeito de execução 


introdução básica

        Nota: A premissa deste artigo é ter aprendido a transformação afim de imagem

        Usando a transformação de perspectiva do opencv nos permite extrair de forma simples a informação desejada. Só precisamos conhecer os 4 pontos da imagem original. Através desses 4 pontos e as coordenadas da imagem que queremos gerar, podemos calcular a matriz M, e então pass cv. O método warpPerspective pode extrair a imagem.

        Vamos dar uma olhada no efeito primeiro e depois usar essa tecnologia para extrair o livro na imagem


Introdução ao cv2.getPerspectiveTransforms

        Acima sabemos que precisamos usar as coordenadas nas 4 imagens originais e as coordenadas da imagem recém-gerada para obter a matriz M por operação. É muito trabalhoso calcular à mão. Usamos a função fornecida pelo opencv para completá-la . Esta função retorna a matriz M

def getPerspectiveTransform(src, dst, solveMethod=None)
  • src: coordenadas de 4 pontos na imagem original
  • dst: coordenadas de 4 pontos da imagem gerada
  • solveMethod: método de decomposição de matrizes, passado para cv2.solve(DecompTypes) para resolver equações lineares ou resolver problemas de mínimos quadrados, o valor padrão é None, o que significa que DECOMP_LU é usado. Para detalhes, consulte o site oficial

        Um diagrama esquemático é dado abaixo.


Introdução ao cv2.warpPerspective

        Este método é muito semelhante ao warpPerspective e é explicado abaixo

def warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)
  • src: imagem de entrada
  • M: Matriz de operação
  • dsize: O tamanho da matriz após a operação, ou seja, o tamanho da imagem de saída
  • dst: imagem de saída
  • flags: uma combinação de métodos de interpolação, o mesmo que a interpolação na função resize, você pode visualizar cv2.resize
  • borderMode: método de extrapolação de pixel, consulte o site oficial para obter detalhes
  • borderValue: valor borderValue a ser usado em caso de borda constante; por padrão é 0 

Encontrar imagens de recursos

        Faça a saída da imagem através do matplotlib e, em seguida, observe aproximadamente as 4 coordenadas da imagem do recurso

        Aqui eu dou 4 coordenadas de superior esquerdo, superior direito, inferior esquerdo e inferior direito por observação, (190, 240), (505, 160), (360, 670), (768, 490)

src = np.float32([[190, 240], [505, 160], [360, 670], [768, 490]])

        Obtemos as 4 coordenadas da imagem de feição e, em seguida, damos as 4 coordenadas da imagem recém-gerada. O que eu quero gerar é uma imagem com uma altura de 640 e uma largura de 480, então o recém-gerado superior esquerdo, superior direito , inferior esquerdo, inferior direito 4 coordenadas são (0, 0), (480, 0), (0, 640), (480, 640)

dst = np.float32([[0, 0], [480, 0], [0, 640], [480, 640]])

Código completo e efeito de execução 

import cv2
import numpy as np

img = cv2.imread('../images/book.jpg')
# 设置特征图像和生成图像的坐标
src = np.float32([[190, 240], [505, 160], [360, 670], [768, 490]])
dst = np.float32([[0, 0], [480, 0], [0, 640], [480, 640]])
# 通过运算得出M矩阵
M = cv2.getPerspectiveTransform(src, dst)
# 提取特征图片
book = cv2.warpPerspective(img, M, (480, 640))

cv2.imshow('img', cv2.resize(img, (480, 640)))
cv2.imshow('book', book)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

Acho que você gosta

Origin blog.csdn.net/m0_51545690/article/details/123961645
Recomendado
Clasificación