win10+Python3.7.3+OpenCV3.4.1入门学习(五)————5.4透视

Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm

5.3节所讲的仿射变换可以将矩形映射为任意平行四边形,透视变换则可以将任意四边形映射为矩形。
透视变换通过函数cv2.warpPerspective()实现,该函数的语法是:

dst = cv2.warpPerspective( src, M, dsize[, flags[, borderMode[, borderValue]]] )

式中:
● dst代表透视处理后的输出图像,该图像和原始图像具有相同的类型。dsize决定输出图像的实际大小。
● src代表要透视的图像。
● M代表一个3×3的变换矩阵。
● dsize代表输出图像的尺寸大小。
● flags代表插值方法,默认为INTER_LINEAR。当该值为WARP_INVERSE_MAP时,意味着M是逆变换类型,能实现从目标图像dst到原始图像src的逆变换。具体可选值参见表5-1。
● borderMode代表边类型,默认为BORDER_CONSTANT。当该值为BORDER_TRANSPARENT时,意味着目标图像内的值不做改变,这些值对应原始图像内的异常值。
● borderValue代表边界值,默认是0。
与仿射变换一样,同样可以使用一个函数来生成函数cv2.warpPerspective()所使用的转换矩阵。该函数是cv2.getPerspectiveTransform(),其语法格式为:

retval = cv2.getPerspectiveTransform( src, dst )

式中:
● src代表输入图像的四个顶点的坐标。
● dst代表输出图像的四个顶点的坐标。

需要注意的是,src参数和dst参数是包含四个点的数组,与仿射变换函数cv2.getAffineTransform()中的三个点是不同的。实际使用中,我们可以根据需要控制src中的四个点映射到dst中的四个点。
eg1:设计程序,完成图像透视。
根据题目要求,设计程序如下:

import cv2
import numpy as np
img=cv2.imread('demo.bmp')
rows,cols=img.shape[:2]
print(rows,cols)
pts1 = np.float32([[150,50],[400,50],[60,450],[310,450]])
pts2 = np.float32([[50,50],[rows-50,50],[50,cols-50],[rows-50,cols-50]])
M=cv2.getPerspectiveTransform(pts1,pts2)
dst=cv2.warpPerspective(img,M,(cols,rows))
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()

在本例中,指定原始图像中平行四边形的四个顶点pts1,指定目标图像中矩形的四个顶点pts2,使用M=cv2.getPerspectiveTransform(pts1, pts2)生成转换矩阵M。接下来,使用语句dst=cv2.warpPerspective(img, M, (cols, rows))完成从平行四边形到矩形的转换。
运行程序,出现如图5-6所示的运行结果。其中,左图是原始图像,是一个平行四边形(内含多个小平行四边形);右图是透视结果图像,是一个矩形(内含多个小矩形)。

在这里插入图片描述在这里插入图片描述

### 回答1: 在Pycharm中使用Shi-tomasi算法进行图像配准和拼接,可以按照以下步骤操作: 1. 导入需要的库,包括cv2,numpy等。 2. 读取需要拼接的图像,将其转化为灰度图像。 3. 使用Shi-tomasi算法检测图像中的关键点。 4. 使用Lucas-Kanade算法对检测到的关键点进行光流跟踪。 5. 计算两幅图像之间的转换矩阵,将其应用于其中一幅图像。 6. 将两幅图像拼接在一起,生成拼接后的图像。 下面是一个简单的示例代码,可以参考使用: ```python import cv2 import numpy as np # 读取图像 img1 = cv2.imread('image1.jpg') img2 = cv2.imread('image2.jpg') # 将图像转化为灰度图像 gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) # 使用Shi-tomasi算法检测关键点 corners1 = cv2.goodFeaturesToTrack(gray1, 1000, 0.01, 10) corners2 = cv2.goodFeaturesToTrack(gray2, 1000, 0.01, 10) # 使用Lucas-Kanade算法进行光流跟踪 lk_params = dict(winSize=(15, 15), maxLevel=2, criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03)) p1, st, err = cv2.calcOpticalFlowPyrLK(gray1, gray2, corners1, None, **lk_params) # 计算转换矩阵 M, mask = cv2.findHomography(p1, corners2, cv2.RANSAC, 5.0) # 将图像1应用转换矩阵 result = cv2.warpPerspective(img1, M, (img1.shape[1] + img2.shape[1], img1.shape[0])) # 将图像2拼接到图像1后面 result[0:img2.shape[0], img1.shape[1]:img1.shape[1] + img2.shape[1]] = img2 # 显示拼接后的图像 cv2.imshow("Result", result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码中,我们先使用`cv2.goodFeaturesToTrack()`函数检测关键点,再使用`cv2.calcOpticalFlowPyrLK()`函数进行光流跟踪,得到两幅图像之间的转换矩阵,最后使用`cv2.warpPerspective()`函数将其中一幅图像应用转换矩阵,然后将两幅图像拼接在一起。 ### 回答2: PyCharm是一个非常强大的Python集成开发环境,但是它本身并不直接提供图像配准和拼接的功能。然而,我们可以使用PyCharm来编写Python代码来实现这个任务。 在图像配准中,Shi-Tomasi角点检测是一个常用的方法,它可以在图像中检测到关键点。这些关键点可以用来进行图像特征匹配和配准。 首先,我们需要导入必要的库/模块,如OpenCV和Numpy。然后,我们可以使用OpenCV中的Shi-Tomasi角点检测函数cv2.goodFeaturesToTrack()来检测图像中的关键点。 接下来,我们可以使用其他配准算法,如RANSAC或最小平方匹配,来匹配和校准图像中的关键点。这些算法可以帮助我们在一对或多对图像中找到相似的特征点,并将它们对齐。 最后,我们可以使用图像拼接算法,如插值或透视变换,来完成图像的拼接。这些算法可以将多个图像融合成一个整体,并生成一个无缝的拼接图像。 在PyCharm中,我们可以通过创建一个新的Python文件,在其中编写上述代码来实现图像配准和拼接功能。我们可以使用PyCharm的调试功能来检查代码的正确性,并且在需要时进行调试和修复错误。 总之,虽然PyCharm本身不提供图像配准和拼接的功能,但我们可以使用PyCharm来编写Python代码来实现这个任务。通过使用OpenCV和其他相关库,我们可以实现Shi-Tomasi角点检测、图像配准和拼接,以实现我们期望的结果。 ### 回答3: PyCharm是一种集成开发环境,用于Python编程。Shi-Tomasi是一种用于图像处理的特征检测算法,常用于图像配准和拼接。 图像配准是指将多个图像进行对齐,使得它们在空间上有一致的几何关系。Shi-Tomasi算法可以用于检测图像中的角点,角点通常包含丰富的纹理信息,可以用于图像配准。在PyCharm中,我们可以使用OpenCV库中的Shi-Tomasi算法实现图像配准。 图像拼接是指将多个图像拼接成一个大的图像。通常情况下,拼接的图像会有重叠的部分。Shi-Tomasi算法可以用于检测图像中的角点,并确定重叠区域的位置。通过找到重叠区域的角点,我们可以将多个图像进行拼接。在PyCharm中,我们可以使用OpenCV库中的Shi-Tomasi算法实现图像拼接。 使用PyCharm进行图像配准和拼接的步骤如下: 1. 导入必要的库,包括OpenCV和NumPy。 2. 读取要处理的图像。 3. 对图像进行灰度化处理,这样可以提高配准和拼接的效果。 4. 使用Shi-Tomasi算法检测角点。 5. 根据检测到的角点进行配准或拼接。 6. 保存处理后的图像。 在PyCharm中,我们可以使用Python编写代码来实现上述步骤。通过调用OpenCV库中实现的Shi-Tomasi算法,我们可以对图像进行角点检测,并根据检测到的角点进行配准和拼接。最后,我们可以通过保存处理后的图像来观察结果。 总之,PyCharm可以用于使用Shi-Tomasi算法对图像进行配准和拼接。通过编写代码实现图像处理步骤,我们可以利用PyCharm的强大功能实现图像处理任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值