如何使用python opencv测量同一图像中两条线之间的角度?
我已经使用hough变换检测到一条不直的车道边界线,然后分别提取该线。然后与另一个具有直线的图像混合。现在我需要计算这两条线之间的角度,但我不知道这两条线的坐标。所以我试着用代码给出垂直线的坐标,但它不能明确地识别这些坐标。有没有办法测量这些线之间的角度?这是我的坐标计算代码和两条线的混合图像如何使用python opencv测量同一图像中两条线之间的角度?,python,opencv,image-processing,computer-vision,Python,Opencv,Image Processing,Computer Vision,我已经使用hough变换检测到一条不直的车道边界线,然后分别提取该线。然后与另一个具有直线的图像混合。现在我需要计算这两条线之间的角度,但我不知道这两条线的坐标。所以我试着用代码给出垂直线的坐标,但它不能明确地识别这些坐标。有没有办法测量这些线之间的角度?这是我的坐标计算代码和两条线的混合图像 import cv2 as cv import numpy as np src = cv.imread("blended2.png", cv.IMREAD_COLOR) if len(src.shap
import cv2 as cv
import numpy as np
src = cv.imread("blended2.png", cv.IMREAD_COLOR)
if len(src.shape) != 2:
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
else:
gray = src
gray = cv.bitwise_not(gray)
bw = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 15, -2)
horizontal = np.copy(bw)
vertical = np.copy(bw)
cols = horizontal.shape[1]
horizontal_size = int(cols / 30)
horizontalStructure = cv.getStructuringElement(cv.MORPH_RECT, (horizontal_size, 1))
horizontal = cv.erode(horizontal, horizontalStructure)
horizontal = cv.dilate(horizontal, horizontalStructure)
cv.imwrite("img_horizontal8.png", horizontal)
h_transpose = np.transpose(np.nonzero(horizontal))
print("h_transpose")
print(h_transpose[:100])
rows = vertical.shape[0]
verticalsize = int(rows / 30)
verticalStructure = cv.getStructuringElement(cv.MORPH_RECT, (1, verticalsize))
vertical = cv.erode(vertical, verticalStructure)
vertical = cv.dilate(vertical, verticalStructure)
cv.imwrite("img_vertical8.png", vertical)
v_transpose = np.transpose(np.nonzero(vertical))
print("v_transpose")
print(v_transpose[:100])
img = src.copy()
# edges = cv.Canny(vertical,50,150,apertureSize = 3)
minLineLength = 100
maxLineGap = 200
lines = cv.HoughLinesP(vertical,1,np.pi/180,100,minLineLength,maxLineGap)
for line in lines:
for x1,y1,x2,y2 in line:
cv.line(img,(x1,y1),(x2,y2),(0,255,0),2)
cv.imshow('houghlinesP_vert', img)
cv.waitKey(0)
一种方法是使用Hough变换来检测直线并获得每条直线的角度。然后,通过减去两条直线之间的差值,可以找到两条直线之间的角度 首先,我们使用
np.mean
对图像进行算术平均,从而对图像进行基本阈值设置
image = cv2.imread('2.png')
# Compute arithmetic mean
image = np.mean(image, axis=2)
现在我们执行检测线的操作
# Perform Hough Transformation to detect lines
hspace, angles, distances = hough_line(image)
# Find angle
angle=[]
for _, a , distances in zip(*hough_line_peaks(hspace, angles, distances)):
angle.append(a)
接下来,我们获得每条线的角度,并找出差异,以获得我们的结果
# Obtain angle for each line
angles = [a*180/np.pi for a in angle]
# Compute difference between the two lines
angle_difference = np.max(angles) - np.min(angles)
print(angle_difference)
16.08938547486033
完整代码
from skimage.transform import (hough_line, hough_line_peaks)
import numpy as np
import cv2
image = cv2.imread('2.png')
# Compute arithmetic mean
image = np.mean(image, axis=2)
# Perform Hough Transformation to detect lines
hspace, angles, distances = hough_line(image)
# Find angle
angle=[]
for _, a , distances in zip(*hough_line_peaks(hspace, angles, distances)):
angle.append(a)
# Obtain angle for each line
angles = [a*180/np.pi for a in angle]
# Compute difference between the two lines
angle_difference = np.max(angles) - np.min(angles)
print(angle_difference)
我尝试了你的代码,但出现了一个错误<代码>来自。_sparsetools导入(csr\u tocsc、csr\u tobsr、csr\u count\u块,导入错误:DLL加载失败:%1不是有效的Win32应用程序。从错误输出中,我认为您使用的是python 2。此代码需要使用python 3