当前位置:   article > 正文

opencv证件图像矫正(霍夫变换)_delphi opencv 霍夫变换 纠偏

delphi opencv 霍夫变换 纠偏

opencv证件图像矫正

思路

  1. 使用霍夫变换检测出图像中的直线
  2. 计算出所有直线的倾斜角度
  3. 然后求出倾斜角度的平均值
  4. 根据倾斜角度进行旋转
  5. 得到矫正后的图片

注意:并不适合所有场景下的倾斜图片,有的场景下效果并不好

cv.HoughLines()

cv.HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines
  • 1

参数:

  • lines:数组,每一个元素都是一条直线对应的(ρ, θ),ρ以像素为单位,θ以弧度为单位
  • image:输入图像,需要是二值图像,所以在应用hough变换之前应用阈值或canny边缘检测
  • rho:ρ的精度
  • theta:θ的精度
  • threshold:阈值,得票数高于该值的线才被认为是线,由于投票数取决于线上的点数,所以它代表了应该被检测到的线的最小点数

效果

原图
原图
检测直线
在这里插入图片描述
矫正后
在这里插入图片描述

代码

import numpy as np
import cv2
import math
from scipy import ndimage

img = cv2.imread("")
img1 = img.copy()
cv2.imshow("img", img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用Canny边缘检测算法进行边缘检测
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi / 180, 110)
# 初始化旋转角度为0
rotate_angle = 0
# 遍历检测到的直线
for rho, theta in lines[0]:
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a * rho
    y0 = b * rho
    x1 = int(x0 + 1000 * (-b))
    y1 = int(y0 + 1000 * (a))
    x2 = int(x0 - 1000 * (-b))
    y2 = int(y0 - 1000 * (a))
    # 排除垂直或水平的直线
    if x1 == x2 or y1 == y2:
        continue
    # 计算直线的斜率
    t = float(y2 - y1) / (x2 - x1)
    # 根据斜率计算旋转角度
    rotate_angle = math.degrees(math.atan(t))
    # 根据旋转角度进行调整
    if rotate_angle > 45:
        rotate_angle = -90 + rotate_angle
    elif rotate_angle < -45:
        rotate_angle = 90 + rotate_angle

for line in lines:
    rho = line[0][0]
    theta = line[0][1]
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a * rho
    y0 = b * rho
    x1 = int(x0 + 1000 * (-b))
    y1 = int(y0 + 1000 * (a))
    x2 = int(x0 - 1000 * (-b))
    y2 = int(y0 - 1000 * (a))
    cv2.line(img1, (x1, y1), (x2, y2), (0, 0, 255), 1)
cv2.imshow("lines", img1)
rotate_img = ndimage.rotate(img, rotate_angle)
cv2.imshow("rotate_img", rotate_img)
cv2.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/580917?site
推荐阅读
相关标签
  

闽ICP备14008679号