python

您所在的位置:网站首页 python测图中物体的尺寸 python

python

2023-07-27 09:42| 来源: 网络整理| 查看: 265

python-opencv直线检测+直线拟合+计算偏移量

计算边界直线与x坐标轴的距离=首先canny边缘检测——>直线检测——>直线拟合——>计算与x坐标轴的距离。

直接上代码:

import cv2 #opencv读取的格式是BGR import numpy as np vc = cv2.VideoCapture('D:/Desktop/duizhong/fangzhen.mp4') if vc.isOpened(): #判断能否读取 open, frame = vc.read() else: open = False while open: ret, frame = vc.read() if frame is None:#读取为空 break if ret == True:#读取不为空 #边缘检测 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) blur = cv2.blur(gray, (3, 3))#矩阵维度3*3 aussian = cv2.GaussianBlur(frame, (5, 5), 1) v1=cv2.Canny(blur,80,150)#minval、maxval的值 #值小时检测更仔细 cv2.imshow("canny",v1) #直线检测 roi = frame[150:400,300:700] gray1 = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY) blur1 = cv2.blur(gray1, (3, 3))#矩阵维度3*3 v2=cv2.Canny(blur1,80,150)#minval、maxval的值 minLineLength = 5 maxLineGap =10 lines = cv2.HoughLinesP(v2, 1, np.pi/180, 10, minLineLength, maxLineGap) while lines is None: break else: for line in lines: x1,y1,x2,y2 = line[0] loc=[] cv2.line(roi,(x1,y1), (x2,y2), (0,255,0),2) loc.append([x1,y1]) loc.append([x2,y2]) loc= np.array(loc) #print(line[0]) #print(lines) output =cv2.fitLine(loc,cv2.DIST_L2,0,0.01,0.01) k = output[1] / output[0] c = output[3] - k * output[2]+150#因为在roi窗口坐标系与原坐标系相差150 s=frame.shape a=s[0]//2 #print(c) dx=c-a#偏移量 print(dx) cv2.imshow("line",frame) #轮廓检侧 blur1 = cv2.blur(gray1, (3, 3))#矩阵维度3*3 ret, thresh = cv2.threshold(blur1, 127, 255, cv2.THRESH_BINARY) contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) res = cv2.drawContours(roi, contours, -1, (0, 0, 255), 2)#-1表示绘制所有,改数选择绘制的图像、2线条宽度 #cv2.imshow('res',res) #中心线也就是坐标轴x轴 s=frame.shape a=s[0]//2 b=s[1] cv2.line(frame,(0,a),(b,a),(0, 0, 255),2) cv2.imshow("line",frame) if cv2.waitKey(10) & 0xFF == 27: break vc.release() cv2.destroyAllWindows()

视频:

python-opencv直线检测+直线拟合+计算直线间距离

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3