OpenCV霍夫变换直线检测,Python

r囧r小猫 2023-02-11 08:55 143阅读 0赞

假设需要把图片

20190511223909598.png

中的直线检测出来并用红线标记:

  1. import cv2
  2. import numpy as np
  3. if __name__ == "__main__":
  4. original_img = cv2.imread("p.jpg")
  5. gray = cv2.cvtColor(original_img, cv2.COLOR_BGR2GRAY)
  6. blur_img = cv2.GaussianBlur(gray, (3, 3), 0)
  7. edges = cv2.Canny(blur_img, 50, 150, apertureSize=3)
  8. rho = 1 # 线段以像素为单位的精度,double类型,1.0为1个像素
  9. theta = np.pi / 180 # 通过步长为1的半径和步长为π/180的角度,搜索所有可能的直线。
  10. threshold = 10 # 累加平面的阈值,int,超过设定阈值才被判定检测出线段,值越大,检出的线段个数越少。
  11. minLineLength = 20 # 能组成一条直线的最少点的数量. 点数量不足的直线将被抛弃.如果小于该值,则不被认为是一条直线.
  12. maxLineGap = 10 # 能被认为在一条直线上的亮点的最大距离.同一方向上两条线段断定为一条线段的最大容许间隔(断裂).直线间隙最大值,如果两条直线间隙大于该值,则被认为是两条线段,否则是一条。
  13. lines = cv2.HoughLinesP(edges, rho, theta, threshold,
  14. minLineLength, maxLineGap)
  15. print(type(lines))
  16. for l in lines.tolist():
  17. x1, y1, x2, y2 = l[0]
  18. cv2.line(original_img, (x1, y1), (x2, y2),
  19. color=(0, 0, 255), thickness=1)
  20. cv2.imshow('Canny', edges)
  21. cv2.imshow('Result', original_img)
  22. cv2.waitKey(0)
  23. cv2.destroyAllWindows()

结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5ncGhpbA_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,143人围观)

还没有评论,来说两句吧...

相关阅读