如何使用opencv Hough线算法获得线的交点?
这是我的代码:
import cv2
import numpy as np
import imutils
im = cv2.imread('../data/test1.jpg')
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 60, 150, apertureSize=3)
img = im.copy()
lines = cv2.HoughLines(edges,1,np.pi/180,200)
for line in lines:
for rho,theta in line:
a = np.cos(theta)
b = np.sin(theta)
x0 = a*rho
y0 = b*rho
x1 = int(x0 + 3000*(-b))
y1 = int(y0 + 3000*(a))
x2 = int(x0 - 3000*(-b))
y2 = int(y0 - 3000*(a))
cv2.line(img,(x1,y1),(x2,y2),(0,255,0),10)
cv2.imshow('houghlines',imutils.resize(img, height=650))
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
输出:
我想得到所有的交点.
我正在尝试在图像中找到带圆角的矩形对象的轮廓.我试过HoughLinesP和findContours,但并没有达到预期的效果.
码:
import cv2
import matplotlib.pyplot as plt
import util
image = cv2.imread("./img/findrect0.png", 1)
gray = util.grayImage(image)
edges = cv2.Canny(image, 50, 200)
lines = cv2.HoughLinesP(edges, 1, cv2.cv.CV_PI/180, 50, minLineLength=50, maxLineGap=10)[0]
linesImage = image.copy()
util.drawLines(linesImage, lines, thickness=10)
contoursImage = image.copy()
(contours, hierarchy) = cv2.findContours(gray.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
util.drawContours(contoursImage, contours, thickness=10)
util.showOpenCVImagesGrid([image, edges, linesImage, contoursImage], 2, 2, titles=["original image", "canny image", "lines image", "contours image"])
Run Code Online (Sandbox Code Playgroud)
UTIL:
import cv2
import math
import matplotlib.pyplot as plt
def showOpenCVImagesGrid(images, x, y, …Run Code Online (Sandbox Code Playgroud) 我正在使用Hough Lines对此图像进行角点检测.我计划找到线的交叉点作为角落.这是图像.

不幸的是,霍夫为我期望的每一行返回了很多行

如何调整霍夫线,使每条只有四条线对应图像上的实际线?
注意:我正在尝试制作一个可以处理一般范围的图像,方向和质量的过程,而不仅仅是该图像。
我知道您可以使用凸包将一组点用多边形包围起来,并且可以使用几种算法之一为这些点创建最小边界框。但是,我想做与最小边界框类似的操作,但不限于将其限制为矩形。
说我有这张收据:
凸包:
最小边界框(旋转卡尺):
我的目标:(ms-paint):
如您所见,最小边框不太合适,因为从角度来看收据是梯形的。视角越低,情况就越糟。我想有4个点和尖角,所以不能使用凸包。
我是否可以使用一种算法来获得与凸包或最小边界框类似的东西,但仅限于4个点以及任何四边形形状?