Python OpenCV仿射变换实现详细指南

2021年4月9日16:56:17 发表评论 1,274 次浏览

OpenCV的是用于计算机视觉, 机器学习和图像处理的庞大的开放源代码库, 现在它在实时操作中起着重要作用, 这在当今的系统中非常重要。通过使用它, 人们可以处理图像和视频来识别物体, 面部, 甚至是人类的笔迹。当与各种库(例如Numpuy)集成时, Python能够处理OpenCV数组结构以进行分析。

注意:有关更多信息, 请参阅OpenCV Python教程

仿射变换

在仿射变换中, 原始图像中的所有平行线在输出图像中仍将平行。为了找到变换矩阵, 我们需要输入图像中的三个点以及它们在输出图像中的对应位置。然后cv2.getAffineTransform将创建一个2×3矩阵, 该矩阵将传递给cv2.warpAffine.

cv2.getAffineTransform方法:

语法:cv2.getPerspectiveTransform(src, dst)
参数:
src:源图像中四边形顶点的坐标。
dst:目标图像中相应四边形顶点的坐标。

cv2.warpAffine方法:

语法:cv2.warpAffine(src, M, dsize, dst, flags, borderMode, borderValue)参数:src:输入图像。 dst:输出图像, 其大小为dsize, 并且类型与src相同。 M:变换矩阵。 dsize:输出图像的大小。标志:插值方法(请参阅resize())和可选标志WARP_INVERSE_MAP的组合, 这意味着M是逆变换(dst-> src)。 borderMode:像素外推法;当borderMode = BORDER_TRANSPARENT时, 表示目标图像中与源图像中的"离群值"相对应的像素未被该函数修改。 borderValue:在边界不变的情况下使用的值;默认情况下为0。

示例1:

import cv2
import numpy as np
from matplotlib import pyplot as plt
  
  
img = cv2.imread( 'food.jpeg' )
rows, cols, ch = img.shape
  
pts1 = np.float32([[ 50 , 50 ], [ 200 , 50 ], [ 50 , 200 ]])
  
pts2 = np.float32([[ 10 , 100 ], [ 200 , 50 ], [ 100 , 250 ]])
  
M = cv2.getAffineTransform(pts1, pts2)
dst = cv2.warpAffine(img, M, (cols, rows))
  
plt.subplot( 121 )
plt.imshow(img)
plt.title( 'Input' )
  
plt.subplot( 122 )
plt.imshow(dst)
plt.title( 'Output' )
  
plt.show()
  
# Displaying the image
while ( 1 ):
      
     cv2.imshow( 'image' , img)
     if cv2.waitKey( 20 ) & 0xFF = = 27 :
         break
          
cv2.destroyAllWindows()

输出如下:

Python OpenCV:仿射变换

示例2:

import cv2
import numpy as np
from matplotlib import pyplot as plt
  
  
img = cv2.imread( 'food.jpeg' )
rows, cols, ch = img.shape
  
pts1 = np.float32([[ 50 , 50 ], [ 200 , 50 ], [ 50 , 200 ]])
  
pts2 = np.float32([[ 10 , 100 ], [ 200 , 50 ], [ 100 , 250 ]])
  
M = cv2.getAffineTransform(pts1, pts2)
dst = cv2.warpAffine(img, M, (cols, rows))
  
plt.subplot( 121 )
plt.imshow(img)
plt.title( 'Input' )
  
plt.subplot( 122 )
plt.imshow(dst)
plt.title( 'Output' )
plt.show()
  
# Displaying the image
while ( 1 ):
      
     cv2.imshow( 'image' , img)
     if cv2.waitKey( 20 ) & 0xFF = = 27 :
         break
          
cv2.destroyAllWindows()

输出如下:

Python OpenCV:仿射变换

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: