opencv: 直线拟合,霍夫变换cv2.HoughLines、cv2.line,最小二乘cv2.fitline

参考网页:

(19条消息) OpenCV | 直线拟合fitline函数(Python)_cv2.fitline_lovetaozibaby的博客-CSDN博客

例子,出来的结果是非常多直线的,所以需要在拟合前检测出图像焊缝,并提取出拟合点,再进行霍夫变换。

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
import cv2
import numpy as np
from skimage import morphology
def show_processImg(img):
    cv2.imshow('img', img)
    # cv2.waitKey(0)
    while True:
        if cv2.getWindowProperty('img', 0) == -1# 当窗口关闭时为-1,显示时为0
            break
        cv2.waitKey(1)
    # cv2.destroyWindow('img')
    cv2.destroyAllWindows()
img = cv2.imread('D:/project/project/line_detect/resources/welding_line.png', 0)
recognizeImg=cv2.Canny(img,50,10)
#霍夫检测直线。
#HoughLines函数输出检测到直线的矢量表示集合,每一条直线由具有两个元素的矢量(ρ, θ)表示,其中ρ表示直线距离原点(0, 0)的长度,θ表示与直线垂直线的角度(弧度)
lines = cv2.HoughLines(recognizeImg, 1, np.pi / 180, 100)
# print(lines.shape,lines[0])
#绘制直线
for line in lines:
    rho,theta=line[0]
    x0=rho*np.cos(theta)
    y0 = rho * np.sin(theta)
    k=np.around(-x0/y0,decimals=2)#两垂直线截距互为倒数,且变负号
    b=y0-k*x0#截距
    height,width=recognizeImg.shape
    x1=int(x0-width//2)
    y1=int(k*x1+b)
    x2=int(x0+width//2)
    y2=int(k*x2+b)
    # print(k)
    # print(recognizeImg.shape)
    cv2.line(recognizeImg,(x1,y1),(x2,y2),(255,0,0),1)
show_processImg(recognizeImg)

  

   

 2、最小二乘拟合 

 

 

posted @   Aneverforget  阅读(1060)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示