【Python OpenCV仿射变换实现详细指南】OpenCV的是用于计算机视觉, 机器学习和图像处理的庞大的开放源代码库, 现在它在实时操作中起着重要作用, 这在当今的系统中非常重要。通过使用它, 人们可以处理图像和视频来识别物体, 面部, 甚至是人类的笔迹。当与各种库(例如Numpuy)集成时, Python能够处理OpenCV数组结构以进行分析。
注意:有关更多信息, 请参阅OpenCV Python教程
仿射变换
在仿射变换中, 原始图像中的所有平行线在输出图像中仍将平行。为了找到变换矩阵, 我们需要输入图像中的三个点以及它们在输出图像中的对应位置。然后cv2.getAffineTransform将创建一个2×3矩阵, 该矩阵将传递给cv2.warpAffine.
cv2.getAffineTransform方法:
语法:cv2.getPerspectiveTransform(src, dst)cv2.warpAffine方法:
参数:
src:源图像中四边形顶点的坐标。
dst:目标图像中相应四边形顶点的坐标。
语法: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 pltimg = cv2.imread( 'food.jpeg' )
rows, cols, ch = img.shapepts1 = 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 :
breakcv2.destroyAllWindows()
输出如下:
文章图片
示例2:
import cv2
import numpy as np
from matplotlib import pyplot as pltimg = cv2.imread( 'food.jpeg' )
rows, cols, ch = img.shapepts1 = 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 :
breakcv2.destroyAllWindows()
输出如下:
文章图片
首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。
推荐阅读
- Bash程序检查Number是否为质数
- SASS如何使用占位符选择器(用法示例)
- Python使用Pandas处理日期和时间
- 如何在JavaScript中创建二维数组()
- 进展问题(AP,GP,HP)详细介绍
- CSS边框属性用法示例
- 亚马逊面试题分享|S54(实习)
- 安装系统 华硕笔记本重装系统,教您华硕笔记本如何重装系统(安装系统)
- 读卡器怎样用,教您如何运用读卡器