当前位置:   article > 正文

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

目录

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

一、简单介绍

二、简单图像倾斜校正处理效果实现原理

三、简单图像倾斜校正处理效果案例实现简单步骤

四、注意事项


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里使用 Python  基于 OpenCV 进行视觉图像处理,......

二、简单图像倾斜校正处理效果实现原理

在 OpenCV 中,可以使用图像处理技术对图像进行倾斜纠正。一种常用的方法是通过霍夫变换检测图像中的直线,然后计算直线的角度,最后将图像根据角度进行旋转。

图像倾斜纠正的实现原理:

  1. 边缘检测:首先,将图像转换为灰度图,并使用边缘检测算法(如Canny边缘检测)找到图像中的边缘。

  2. 霍夫变换检测直线:使用霍夫变换(Hough Transform)检测图像中的直线。这可以通过 cv2.HoughLines() 函数来实现。

  3. 计算角度:对于每条直线,计算其与水平线的角度。一般来说,这可以通过直线的极坐标表示中的角度值来得到。

  4. 角度平均:计算所有检测到的直线的角度的平均值。这个平均角度通常代表图像的整体倾斜角度。

  5. 图像旋转:根据平均角度,使用旋转矩阵将图像进行逆时针旋转。这可以通过 cv2.getRotationMatrix2D() 函数来获得旋转矩阵,并使用 cv2.warpAffine() 函数来应用旋转。

三、简单图像倾斜校正处理效果案例实现简单步骤

1、编写代码

2、运行效果

3、具体代码

  1. """
  2. 简单图像倾斜校正处理效果
  3. 1、首先将图像转换为灰度图,并使用 Canny 边缘检测算法检测图像边缘。
  4. 2、然后,我们使用霍夫变换检测图像中的直线,并计算直线的角度。
  5. 3、接着,我们计算直线角度的中位数,并根据该角度对图像进行旋转。
  6. 4、最后,我们显示了纠正后的图像。
  7. """
  8. import cv2
  9. import numpy as np
  10. def correct_skew(img):
  11. """
  12. 处理,计算图片倾斜角度,然后旋转图片,纠正图片
  13. :param img: 原图
  14. :return:
  15. """
  16. # 将图像转换为灰度图
  17. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  18. # 使用 Canny 边缘检测算法
  19. edges = cv2.Canny(gray, 50, 150, apertureSize=3)
  20. # 使用霍夫变换检测直线
  21. lines = cv2.HoughLines(edges, 1, np.pi / 180, 200)
  22. # 检查是否检测到直线
  23. if lines is None:
  24. print("No lines detected. Using default angle.")
  25. return img
  26. # 计算直线的角度
  27. angles = []
  28. for line in lines:
  29. rho, theta = line[0]
  30. angle = theta * 180 / np.pi
  31. angles.append(angle)
  32. # 计算直线角度的中位数
  33. median_angle = np.median(angles)
  34. # 对图像进行旋转
  35. rotated = rotate_image(img, median_angle)
  36. return rotated
  37. def rotate_image(img, angle):
  38. """
  39. 旋转纠正图片
  40. :param img:
  41. :param angle:
  42. :return:
  43. """
  44. # 获取图像的中心点坐标
  45. height, width = img.shape[:2]
  46. center = (width / 2, height / 2)
  47. # 计算旋转矩阵
  48. matrix = cv2.getRotationMatrix2D(center, angle, 1.0)
  49. # 进行图像旋转
  50. rotated = cv2.warpAffine(img, matrix, (width, height), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
  51. return rotated
  52. def main():
  53. # 读取图像
  54. image = cv2.imread('Images/Tilt.jpg')
  55. # 显示结果
  56. cv2.imshow('Origin Image', image)
  57. # 对图像进行倾斜纠正
  58. corrected_image = correct_skew(image)
  59. # 显示结果
  60. cv2.imshow('Corrected Image', corrected_image)
  61. cv2.waitKey(0)
  62. cv2.destroyAllWindows()
  63. if __name__ == '__main__':
  64. main()

四、注意事项

  • 直线检测的阈值设置:霍夫变换检测直线时,阈值的设置会影响直线检测的准确性。需要根据实际情况调整阈值参数。
  • 角度计算的精度:角度的计算精度会影响到最终结果的准确性。在计算角度时,可以考虑使用更高的精度来提高准确性。
  • 旋转矩阵的边界处理:在计算旋转矩阵时,需要考虑到旋转后图像可能会超出原始图像的边界,因此需要使用合适的边界模式来处理这种情况,以避免产生不良影响。
  • 异常处理:在实际应用中,需要考虑到图像中可能不存在直线的情况,因此需要进行异常处理,确保程序的稳定性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/354754
推荐阅读
相关标签
  

闽ICP备14008679号