欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

opencv实现像旋转,opencv几何形检测

终极管理员 知识笔记 111阅读

可以使用Numpy库中的np.float32数据类型创建这个矩阵,并将其传递给OpenCV的cv.warpAffine()函数进行平移运算。在这个矩阵中,txtx代表x轴上的平移量tyty和Y轴上的平移量。通过这个变换矩阵,你可以把图像平移到一个新的位置。Import numpy as npimport cv2 as cv#读取灰度图像imgcv。Imread (img.png,0) rows,而colimg.shape #定义了平移矩阵M np.float32([ [1,0,100],# x轴平移100像素[0,1,50] # y轴平移50像素)# 平移变换dst cv.warpAffine(img,M,(cols,

rows))# 显示平移后的图像cv.imshow(img, dst)cv.waitKey(0)cv.destroyAllWindows()


3.旋转
实现图像的旋转操作。通常旋转操作需要一个旋转角度θ以及旋转的中心点。OpenCV提供了一个函数cv.getRotationMatrix2D来帮助你计算旋转矩阵。该函数采用以下参数
旋转中心点的坐标 (center_x, center_y)
旋转角度 θ
缩放因子 scale
使用这些参数函数将返回一个变换矩阵可以将其传递给cv.warpAffine()函数来实现图像的旋转。

import numpy as npimport cv2 as cv# 读取灰度图像img  cv.imread(img.png, 0)# 获取图像的高度和宽度rows, cols  img.shape# 计算旋转中心点的坐标90 是旋转的角度1 是缩放因子不缩放center_x  (cols - 1) / 2.0center_y  (rows - 1) / 2.0# 获取旋转矩阵参数分别是旋转中心坐标旋转角度缩放因子M  cv.getRotationMatrix2D((center_x, center_y), 180, 1)# 应用仿射变换将图像旋转90度dst  cv.warpAffine(img, M, (cols, rows))# 显示平移后的图像cv.imshow(img, dst)cv.waitKey(0)cv.destroyAllWindows()


4.仿射变换

是一种保持图像中的平行线依旧平行的线性变换。在进行仿射变换时我们需要在原图像中选择三个非共线的点和它们在输出图像中对应的位置。这三个点将确定一个仿射变换矩阵该矩阵可以用于将原图像中的任意点映射到输出图像中的对应点。OpenCV提供了函数cv.getAffineTransform用于计算仿射变换矩阵。

以下是一个示例演示了如何使用cv.getAffineTransform函数进行仿射变换

import numpy as npimport cv2 as cvimport matplotlib.pyplot as plt# 读取输入图像img  cv.imread(drawing.png)rows, cols, ch  img.shape# 原图像中的三个点和它们在输出图像中的对应位置pts1  np.float32([[50, 50], [200, 50], [20, 200]])pts2  np.float32([[10, 100], [200, 50], [100, 250]])# 计算仿射变换矩阵M  cv.getAffineTransform(pts1, pts2)# 应用仿射变换dst  cv.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()

在这个例子中pts1是原图像中的三个点pts2是它们在输出图像中的对应位置。函数cv.getAffineTransform计算了仿射变换矩阵M然后cv.warpAffine函数将该矩阵应用到原图像上得到输出图像dst。左边的图是输入图像右边的图是输出图像。

5.透视变换
透视变换是一种将图像中的任意四边形区域转换为另一个四边形区域的线性变换。在透视变换中我们需要一个 3 × 3 的矩阵这个矩阵可以将原图像中的任意点映射到输出图像中的对应点。为了找到这个变换矩阵我们需要在输入图像和输出图像中选择四个对应的点这四个点中至少有三个不能共线。使用函数 cv.getPerspectiveTransform 可以计算这个透视变换矩阵然后将其传递给 cv.warpPerspective 函数应用变换。

import numpy as npimport cv2 as cvimport matplotlib.pyplot as plt# 读取输入图像img  cv.imread(sudoku.png)rows, cols, ch  img.shape# 原图像中的四个点和它们在输出图像中的对应位置pts1  np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])pts2  np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])# 计算透视变换矩阵M  cv.getPerspectiveTransform(pts1, pts2)# 应用透视变换dst  cv.warpPerspective(img, M, (300, 300))# 显示输入图像和输出图像plt.subplot(121), plt.imshow(img), plt.title(Input)plt.subplot(122), plt.imshow(dst), plt.title(Output)plt.show()

在这个例子中pts1 是原图像中的四个点pts2 是它们在输出图像中的对应位置。函数 cv.getPerspectiveTransform 计算了透视变换矩阵 M然后 cv.warpPerspective 函数将该矩阵应用到原图像上得到输出图像 dst。左边的图是输入图像右边的图是输出图像。

小结

掌握使用OpenCV库进行图像几何变换、阈值处理和平滑处理的关键技能。这些技术在图像处理、计算机视觉和图像分析等领域中具有广泛的应用对于处理各种图像数据具有重要意义,可以应用到更复杂的图像处理任务中。

标签:
声明:无特别说明,转载请标明本文来源!