2024-04-19 21:09:53 发布
网友
如果有直线的极坐标,如何在OpenCV&python中的图像上绘制?
^{}函数取2个点,但只绘制段。我想从图像的一个边缘到另一个边缘画一条线。
您可以在Hough Line Transform tutorial中看到如何执行此操作。
import cv2 import numpy as np img = cv2.imread('dave.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray,50,150,apertureSize = 3) lines = cv2.HoughLines(edges,1,np.pi/180,200) for rho,theta in lines[0]: a = np.cos(theta) b = np.sin(theta) x0 = a*rho y0 = b*rho x1 = int(x0 + 1000*(-b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 - 1000*(-b)) y2 = int(y0 - 1000*(a)) cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2) cv2.imwrite('houghlines3.jpg',img)
看一下下面的解,我首先将极坐标方程中的一条直线转换为笛卡尔坐标,然后使用numpy.vectorize()生成一个向量,使我可以得到表示空间中任意点的直线。
numpy.vectorize()
import cv2 import numpy as np img_size = (200,200) img = np.ones(img_size) * 255 # polar equation theta = np.linspace(0, np.pi, 1000) r = 1 / (np.sin(theta) - np.cos(theta)) # polar to cartesian def polar2cart(r, theta): x = r * np.cos(theta) y = r * np.sin(theta) return x, y x,y = polar2cart(r, theta) x1, x2, y1, y2 = x[0], x[1], y[0], y[1] # line equation y = f(X) def line_eq(X): m = (y2 - y1) / (x2 - x1) return m * (X - x1) + y1 line = np.vectorize(line_eq) x = np.arange(0, img_size[0]) y = line(x).astype(np.uint) cv2.line(img, (x[0], y[0]), (x[-1], y[-1]), (0,0,0)) cv2.imshow("foo",img) cv2.waitKey()
结果:
只需计算外面的2个点。opencv的线很好,例如(-10,-10)表示一个点。
lineThickness = 2 cv2.line(image, (x1, y1), (x2, y2), (0,255,0), lineThickness)
http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html#cv2.line
您可以在Hough Line Transform tutorial中看到如何执行此操作。
看一下下面的解,我首先将极坐标方程中的一条直线转换为笛卡尔坐标,然后使用
numpy.vectorize()
生成一个向量,使我可以得到表示空间中任意点的直线。结果:
只需计算外面的2个点。opencv的线很好,例如(-10,-10)表示一个点。
http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html#cv2.line
相关问题 更多 >
编程相关推荐