概念
霍夫变换是一种特征检测(feature extraction),被广泛应用在图像分析(image analysis)、计算机视觉(computer vision)以及数位影像处理(digital image processing)。霍夫变换是用来辨别找出物件中的特征,例如:线条。他的算法流程大致如下,给定一个物件、要辨别的形状的种类,算法会在参数空间(parameter space)中执行投票来决定物体的形状,而这是由累加空间(accumulator space)里的局部最大值(local maximum)来决定。
题1
import cv2
import numpy as np
img = cv2.imread("shape.png")#读取原图
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150)
minLineLength = 10
maxLineGap = 30
lines = cv2.HoughLinesP(edge,1,np.pi/180,50,minLineLength,maxLineGap)
#画线
for line in lines:
x1,y1,x2,y2 = line[0]
cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
cv2.imshow("img",img)
cv2.imshow("edges",edges)
cv2.imshow("gray",gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
题2
import cv2
import numpy as np
img = cv2.imread("shape.png")#读取原图
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,100)
circles =cv2.HoughCircles(edges,cv2.HOUGH_GRADIENT,1,30,\
param1=40,param2=20,minRadius=5,maxRadius=100)
if not circles is None:
circles = np.uint16(np.around(circles))
for circle in circles:
x,y,r = circle[0]
cv2.circle(img,(x,y),r,(0,0,255),2)
cv2.imshow("img",img)
cv2.imshow("edges",edges)
cv2.imshow("gray",gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
ti3
import cv2
import numpy as np
def canny(image):
blur = cv2.GaussianBlur(image,(5,5),0)
canny = cv2.Canny(blur,50,150)
return canny
def region_of_interest(image):
height = image.shape[0]
ploygons = np.array([[(200,height),(1100,height),(550,250)]])
mask = np.zeros_like(image)
cv2.fillPoly(mask,ploygons,255)
return mask
image = cv2.imread('test_image.jpg',0)
imgcopy = image.copy()
lane_image = np.copy(image)
canny = canny(lane_image)
roi = region_of_interest(canny)
masked_image = cv2.bitwise_and(image,roi)
cv2.imshow("canny",canny)
cv2.imshow("region_of_interest(canny)",roi)
cv2.imshow("masked_image",masked_image)
cv2.waitKey(0)
cv2.destroyAllWindows()