如何建设网站兴田德润可信赖,网站反向绑定域名,赣州九一人才网手机版,做网站的是哪类公司轨道画线分为以下步骤#xff1a; 
1.读取摄像头图片 
2.图片灰度处理#xff0c;截取轨道区域的图片 
3.中值滤波处理#xff0c;并区域取均值后做期望差的绝对值。本人通过一些轨道图片实验#xff0c;用这种方法二值化得到的效果比caany算子等方法的效果好 
4.二值化后再…轨道画线分为以下步骤 
1.读取摄像头图片 
2.图片灰度处理截取轨道区域的图片 
3.中值滤波处理并区域取均值后做期望差的绝对值。本人通过一些轨道图片实验用这种方法二值化得到的效果比caany算子等方法的效果好 
4.二值化后再用DBSAN聚类算法对图片分类 
5.对分好类的坐标在图片中画图 
具体代码如下 
import numpy as np
import cv2colors  [ (0, 0, 0), (128, 0, 0), (0, 128, 0), (128, 128, 0), (0, 0, 128), (128, 0, 128), (0, 128, 128),(128, 128, 128), (64, 0, 0), (192, 0, 0), (64, 128, 0), (192, 128, 0), (64, 0, 128), (192, 0, 128),(64, 128, 128), (192, 128, 128), (0, 64, 0), (128, 64, 0), (0, 192, 0), (128, 192, 0), (0, 64, 128),(128, 64, 12)]def cluster(points, radius100):points: pointcloudradius: max cluster rangeprint(................, len(points))items  []while len(points)1:item  np.array([points[0]])base  points[0]points  np.delete(points, 0, 0)distance  (points[:,0]-base[0])**2(points[:,1]-base[1])**2#获得距离infected_points  np.where(distance  radius**2)#与base距离小于radius**2的点的坐标item  np.append(item, points[infected_points], axis0)border_points  points[infected_points]points  np.delete(points, infected_points, 0)#print(................,len(points))#print(border_points)while len(border_points)  0:border_base  border_points[0]border_points  np.delete(border_points, 0, 0)border_distance  (points[:,0]-border_base[0])**2(points[:,1]-border_base[1])**2border_infected_points  np.where(border_distance  radius**2)#print(/,border_infected_points)item  np.append(item, points[border_infected_points], axis0)for k in border_infected_points:if points[k] not in border_points:border_pointsnp.append(border_points,points[k], axis0)#border_points  points[border_infected_points]points  np.delete(points, border_infected_points, 0)items.append(item)return items#2.图像的灰度处理、边缘分割
def mean_img(img):# gray_img  cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#1.图片的灰度截取处理gray_img  cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)imgssimg[540:743, 810:1035]gray_img  gray_img[540:741, 810:1030]#[540:741, 810:1080]img2gray_imgprint(img2.mean())#中值滤波gray_img  cv2.medianBlur(gray_img, ksize3)cv2.imshow(Dilated Image, gray_img)cv2.waitKey(0)#2.行做期望差,3个值取均值再做差for i in range(gray_img.shape[0]):for j in range(gray_img.shape[1]-2):ss1gray_img[i, j:j2].mean()mabs(gray_img[i][j]-ss1)if m13:img2[i][j] 255else:img2[i][j] 0img2[:,-3:]0cv2.imshow(img_mean, img2)cv2.waitKey(0)# 3.腐蚀膨胀消除轨道线外的点kernel  np.uint8(np.ones((5, 2)))# 膨胀图像.....为了使得轨道线更粗且补足轨道线缺失的地方dilated  cv2.dilate(img2, kernel)#显示膨胀后的图像#dilated[:, -6:]  0cv2.imshow(Dilated Image, dilated)cv2.waitKey(0)ssnp.argwhere(dilated0)print(ss)cv2.imwrite(D:\AI\project\eye_hand_biaoding\\railways\img\\120.jpg,dilated)#聚类算法items  cluster(ss, radius5)print(len(items))i0for item in items:print(, len(item))if len(item)500:for k in item:imgss[k[0]][k[1]]colors[i]i1cv2.imshow(ss,imgss)cv2.waitKey(0)cv2.imwrite(D:\AI\project\eye_hand_biaoding\\railways\img\\121.jpg, imgss)return ss#3.画图
def draw_line(items):print(123)if __name__  __main__:img_pathrD:\AI\project\eye_hand_biaoding\railways\img\1.jpgimgcv2.imread(img_path)ssmean_img(img)ssnp.array(ss)itemscluster(ss, radius25) 
通过以上聚类的方法处理后的图片如下 接下来对两类点进行处理。在这里目前想到的处理方式有两种一是首先对每个类取行的中值或者均值即每个类的每行只保留一个坐标均值或者中间值去除掉了每行两边的坐标。但这个效果不太好后面会附加代码和处理的图片结果二是根据霍夫曼求直线的方法自己重新写个获取直线。 
一、取均值或者中值的代码如下 
import numpy as np
import cv2
from sklearn.linear_model import LinearRegression
import time#https://blog.csdn.net/L888666Q/article/details/127209464
#霍夫曼取直线原理:https://blog.csdn.net/fengjiexyb/article/details/78075888colors  [ (0, 0, 0), (128, 0, 0), (0, 128, 0), (128, 128, 0), (0, 0, 128), (128, 0, 128), (0, 128, 128),(128, 128, 128), (64, 0, 0), (192, 0, 0), (64, 128, 0), (192, 128, 0), (64, 0, 128), (192, 0, 128),(64, 128, 128), (192, 128, 128), (0, 64, 0), (128, 64, 0), (0, 192, 0), (128, 192, 0), (0, 64, 128),(128, 64, 12)]def cluster(points, radius100):points: pointcloudradius: max cluster rangeprint(................, len(points))items  []while len(points)1:item  np.array([points[0]])base  points[0]points  np.delete(points, 0, 0)distance  (points[:,0]-base[0])**2(points[:,1]-base[1])**2#获得距离infected_points  np.where(distance  radius**2)#与base距离小于radius**2的点的坐标item  np.append(item, points[infected_points], axis0)border_points  points[infected_points]points  np.delete(points, infected_points, 0)#print(................,len(points))#print(border_points)while len(border_points)  0:border_base  border_points[0]border_points  np.delete(border_points, 0, 0)border_distance  (points[:,0]-border_base[0])**2(points[:,1]-border_base[1])**2border_infected_points  np.where(border_distance  radius**2)#print(/,border_infected_points)item  np.append(item, points[border_infected_points], axis0)if len(border_infected_points)0:for k in border_infected_points:if points[k] not in border_points:border_pointsnp.append(border_points,points[k], axis0)#border_points  points[border_infected_points]points  np.delete(points, border_infected_points, 0)items.append(item)return itemsdef k_mean(out):print(........................开始计算图片的均值.....................)median  {}i  1for items in out:median[str(i)]  []result  items[:, :-1]ss  result.shaperesult  result.reshape(ss[1], ss[0])result  result[0].tolist()result  list(set(result))  # 去掉result重复的值for m in result:#print(..............., m, ...............................)item  np.where(items[:, :-1]  m)[0]# median[str(i)].append(items[item[len(item)//2]].tolist()) #中位数,有用median[str(i)].append([m, int(items[item][:, -1:].mean())])  # 均值i  1return median#直线的拟合
def lines(median,distances):print(...................直线的拟合......................)for items in median:n_mnp.array(median[items])#转换为array数据meansn_m[:,1:]#取坐标的第二列lensn_m[-1][0]1#总共多少个坐标即坐标个数#print(lens)#1.获取x1,x2的坐标if lens%42:x10lens//41else:x10  lens // 4x20x10*3xlens//2#print(x1,x2:  ,x10,x20)#2.获取y1,y2的坐标y10means[:lens//2].mean()y20  means[lens // 2-1:].mean()ymeans.mean()#print(y1,y2:  , y10, y20)#3.获取直线斜率k k(y1-y2)/(x1-x2)k(y10-y20)/(x10-x20)#print(k:  ,k)#print(x,y:      ,x,y)#4.预测某个点的y值 y-predk*(x_pred-x)y  n_m[i]for i in range(len(n_m)):y_pred  k * (n_m[i][0] - x)  y#print(,y_pred,n_m[i][0],n_m[i][1])if abs(y_pred-n_m[i][1])distances:n_m[i][1]y_pred#median[items][i][1]int(y_pred)median[items]n_m.tolist()return median#2.图像的灰度处理、边缘分割
def mean_img(img,x1,x2,y1,y2):imgsimg.copy()img4  img.copy()#1.图片的灰度截取处理gray_img  cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)gray_img  gray_img[x1:x2, y1:y2]#[540:741, 810:1080],截取轨道画线的区域对该区域识别轨道img2gray_img#2.中值滤波gray_img  cv2.medianBlur(gray_img, ksize3)# cv2.imshow(Dilated Image, gray_img)# cv2.waitKey(0)sttime.time()for i in range(gray_img.shape[0]):for j in range(gray_img.shape[1]-2):ss1  gray_img[i, j:j  2].mean()mabs(gray_img[i][j]-ss1)if m9:img2[i][j] 255else:img2[i][j] 0img2[:,-3:]0et  time.time()print(kmeans时间,et-st)# cv2.imshow(img_mean, img2)# cv2.waitKey(0)# 3.腐蚀膨胀消除轨道线外的点st1time.time()kernel  np.uint8(np.ones((2, 1)))# 膨胀图像.....为了使得轨道线更粗且补足轨道线缺失的地方dilated  cv2.dilate(img2, kernel)#显示膨胀后的图像# cv2.imshow(Dilated Image, dilated)# cv2.waitKey(0)kernel  np.ones((2, 2), np.uint8)dilated  cv2.erode(dilated, kernel)cv2.imshow(ss,dilated)cv2.waitKey(0)ssnp.argwhere(img20)#dilatedcv2.imwrite(D:\AI\project\eye_hand_biaoding\\railways\img\\120.jpg,dilated)#聚类算法items  cluster(ss, radius3)print(len(items))i0out[]#获得大于300个坐标的类for item in items:if len(item)300:out.append(item)print(, len(item))for k in item:img[k[0]x1][k[1]y1]colors[i]#[540:743, 810:1035]i1# cv2.imshow(ss,img)# cv2.waitKey(0)cv2.imwrite(D:\AI\project\eye_hand_biaoding\\railways\img\\121.jpg, img)et1  time.time()print(聚类时间, et1 - st1)#求聚类的每类每行的中位数mediank_mean(out)#根据中位数画图j0for item in median:for k in median[item]:#print(k[0],k[1])imgs[k[0]x1][k[1]y1]  colors[j]  # [540:743, 810:1035]j1cv2.imwrite(D:\AI\project\eye_hand_biaoding\\railways\img\\122.jpg, imgs)et3time.time()print(中位数时间, et3 - et1)print(.....................................,\n)#用直线拟合首先用两个均值得到初始线的斜率及均值坐标然后不断对远离的坐标点拟合distances4while distances0:medianlines(median,distances)distances-1#画图j  0for item in median:for k in median[item]:# print(k[0],k[1])img4[k[0]  x1][k[1]  y1]  colors[j]  # [540:743, 810:1035]j  1cv2.imwrite(D:\AI\project\eye_hand_biaoding\\railways\img\\123.jpg, img4)et4time.time()print(直线拟合消耗时间,et4-et3)return outif __name__  __main__:starttime.time()img_pathr图片路径imgcv2.imread(img_path)outmean_img(img,x1650,x2741,y1825,y21025)#x1540,x2741,y1810,y21030endtime.time()print(time:,end-start) 上述的直线拟合没有用最小二乘法处理后的画图结果如下 显然拟合的结果并不好。下面用霍夫曼求直线的方法拟合。 
二、霍夫曼圆找直线  文章转载自: http://www.morning.wrbnh.cn.gov.cn.wrbnh.cn http://www.morning.pcjw.cn.gov.cn.pcjw.cn http://www.morning.bxqry.cn.gov.cn.bxqry.cn http://www.morning.qllcp.cn.gov.cn.qllcp.cn http://www.morning.mdjtk.cn.gov.cn.mdjtk.cn http://www.morning.qjsxf.cn.gov.cn.qjsxf.cn http://www.morning.hhfwj.cn.gov.cn.hhfwj.cn http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn http://www.morning.rdzlh.cn.gov.cn.rdzlh.cn http://www.morning.kpmxn.cn.gov.cn.kpmxn.cn http://www.morning.bpmnz.cn.gov.cn.bpmnz.cn http://www.morning.mtgkq.cn.gov.cn.mtgkq.cn http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn http://www.morning.nkmw.cn.gov.cn.nkmw.cn http://www.morning.iknty.cn.gov.cn.iknty.cn http://www.morning.khcpx.cn.gov.cn.khcpx.cn http://www.morning.trsfm.cn.gov.cn.trsfm.cn http://www.morning.jpmcb.cn.gov.cn.jpmcb.cn http://www.morning.bnqcm.cn.gov.cn.bnqcm.cn http://www.morning.mprky.cn.gov.cn.mprky.cn http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn http://www.morning.ybgcn.cn.gov.cn.ybgcn.cn http://www.morning.tfei69.cn.gov.cn.tfei69.cn http://www.morning.zxqqx.cn.gov.cn.zxqqx.cn http://www.morning.wdwfm.cn.gov.cn.wdwfm.cn http://www.morning.psyrz.cn.gov.cn.psyrz.cn http://www.morning.btblm.cn.gov.cn.btblm.cn http://www.morning.mxhgy.cn.gov.cn.mxhgy.cn http://www.morning.tpps.cn.gov.cn.tpps.cn http://www.morning.kpwcx.cn.gov.cn.kpwcx.cn http://www.morning.zdqsc.cn.gov.cn.zdqsc.cn http://www.morning.lmhcy.cn.gov.cn.lmhcy.cn http://www.morning.rwfp.cn.gov.cn.rwfp.cn http://www.morning.dgng.cn.gov.cn.dgng.cn http://www.morning.dhbyj.cn.gov.cn.dhbyj.cn http://www.morning.fbqr.cn.gov.cn.fbqr.cn http://www.morning.bjndc.com.gov.cn.bjndc.com http://www.morning.mdfxn.cn.gov.cn.mdfxn.cn http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn http://www.morning.lgnz.cn.gov.cn.lgnz.cn http://www.morning.tqpnf.cn.gov.cn.tqpnf.cn http://www.morning.pbpcj.cn.gov.cn.pbpcj.cn http://www.morning.rkbly.cn.gov.cn.rkbly.cn http://www.morning.zpfqh.cn.gov.cn.zpfqh.cn http://www.morning.qcrhb.cn.gov.cn.qcrhb.cn http://www.morning.ybnps.cn.gov.cn.ybnps.cn http://www.morning.mehrim.com.gov.cn.mehrim.com http://www.morning.thjqk.cn.gov.cn.thjqk.cn http://www.morning.jqpyq.cn.gov.cn.jqpyq.cn http://www.morning.jgcxh.cn.gov.cn.jgcxh.cn http://www.morning.qhmhz.cn.gov.cn.qhmhz.cn http://www.morning.nwqyq.cn.gov.cn.nwqyq.cn http://www.morning.bhbxd.cn.gov.cn.bhbxd.cn http://www.morning.cxtbh.cn.gov.cn.cxtbh.cn http://www.morning.gwjsm.cn.gov.cn.gwjsm.cn http://www.morning.lyldhg.cn.gov.cn.lyldhg.cn http://www.morning.pqkrh.cn.gov.cn.pqkrh.cn http://www.morning.kxsnp.cn.gov.cn.kxsnp.cn http://www.morning.bkfdf.cn.gov.cn.bkfdf.cn http://www.morning.fnmtc.cn.gov.cn.fnmtc.cn http://www.morning.gxtfk.cn.gov.cn.gxtfk.cn http://www.morning.dxrbp.cn.gov.cn.dxrbp.cn http://www.morning.fglth.cn.gov.cn.fglth.cn http://www.morning.rhqn.cn.gov.cn.rhqn.cn http://www.morning.mpngp.cn.gov.cn.mpngp.cn http://www.morning.fpngg.cn.gov.cn.fpngg.cn http://www.morning.nkqrq.cn.gov.cn.nkqrq.cn http://www.morning.sftrt.cn.gov.cn.sftrt.cn http://www.morning.rxkq.cn.gov.cn.rxkq.cn http://www.morning.hbdqf.cn.gov.cn.hbdqf.cn http://www.morning.jwfqq.cn.gov.cn.jwfqq.cn http://www.morning.mqbsm.cn.gov.cn.mqbsm.cn http://www.morning.gllhx.cn.gov.cn.gllhx.cn http://www.morning.kxbry.cn.gov.cn.kxbry.cn http://www.morning.srrrz.cn.gov.cn.srrrz.cn http://www.morning.rszbj.cn.gov.cn.rszbj.cn http://www.morning.gtqx.cn.gov.cn.gtqx.cn http://www.morning.wxckm.cn.gov.cn.wxckm.cn http://www.morning.kxqpm.cn.gov.cn.kxqpm.cn http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn