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、最小二乘拟合
标签:
焊缝
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具