提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容霍夫变换。
一、霍夫变换原理
霍夫变换运用两个坐标空间之间的变换,将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题
二、霍夫变换讲解
三、源代码
1、霍夫直线代码
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
#导入图片
image = cv.imread('picture1.jpg')
#转换为灰度图
grayImage = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
#高斯模糊
gaussionImage = cv.GaussianBlur(grayImage, (9,9),0)
#边缘检测
edgesImage =cv.Canny(gaussionImage,50,135)
#霍夫直线检测
linesNumpy = cv.HoughLines(edgesImage,1.1,np.pi/180,150)
#绘制直线,将极坐标点(ρ,θ)转化成之直线
imageLines = image.copy()
for line in linesNumpy:
rho, theta = line[0]
a = np.cos(theta)
b = np.sin(theta)
x0 = rho * a
y0 = rho * b
# 找两个点
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * a)
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * a)
cv.line(imageLines, (x1, y1), (x2, y2), (0, 0, 255), 3)
titles = ['OriginalImage', 'gaussionImage', 'edgesImage', 'imageLines']
images = [image, gaussionImage, edgesImage, imageLines]
for i in range(4):
plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()h
2、霍夫圆代码
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
#导入图片
image = cv.imread('picture1.jpg')
#转换为灰度图
grayImage = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
#边缘检测
edgesImage =cv.Canny(grayImage,100,105)
#高斯模糊
gaussionImage = cv.GaussianBlur(edgesImage, (7,7),0)
circles1 = cv.HoughCircles(gaussionImage,cv.HOUGH_GRADIENT,dp=1,minDist=15,param1=130,param2=14,minRadius=15,maxRadius=21)
circles = np.uint16(np.around(circles1))
circleImage = image.copy()
for circle in circles[0,:]:
cv.circle(circleImage,(circle[0],circle[1]),circle[2],(255,0,0),2)
cv.circle(circleImage,(circle[0],circle[1]),2,(0,255,0),2)
titles = ['OriginalImage', 'gaussionImage', 'edgesImage', 'circleImage']
images = [image, gaussionImage, edgesImage, circleImage]
for i in range(4):
plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
四、代码封装
目的:python+qt封装后方便调参
总结
以上是我在学习霍夫变换原理后的理解和总结,综合整理了一下网上的知识所得。