当前位置: 首页 > news >正文

国际要闻时事快报站长之家seo综合

国际要闻时事快报,站长之家seo综合,企业网站管理系统程序名称,海市科技网站建设轨道画线分为以下步骤: 1.读取摄像头图片 2.图片灰度处理,截取轨道区域的图片 3.中值滤波处理,并区域取均值后做期望差的绝对值。本人通过一些轨道图片实验,用这种方法二值化得到的效果比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, radius=100):"""points: pointcloudradius: max cluster range"""print("................", 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], axis=0)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], axis=0)for k in border_infected_points:if points[k] not in border_points:border_points=np.append(border_points,points[k], axis=0)#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)imgss=img[540:743, 810:1035]gray_img = gray_img[540:741, 810:1030]#[540:741, 810:1080]img2=gray_imgprint(img2.mean())#中值滤波gray_img = cv2.medianBlur(gray_img, ksize=3)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):ss1=gray_img[i, j:j+2].mean()m=abs(gray_img[i][j]-ss1)if m>13: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)ss=np.argwhere(dilated>0)print(ss)cv2.imwrite("D:\AI\project\eye_hand_biaoding\\railways\img\\120.jpg",dilated)#聚类算法items = cluster(ss, radius=5)print(len(items))i=0for item in items:print("====>", len(item))if len(item)>500:for k in item:imgss[k[0]][k[1]]=colors[i]i+=1cv2.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_path=r"D:\AI\project\eye_hand_biaoding\railways\img\1.jpg"img=cv2.imread(img_path)ss=mean_img(img)ss=np.array(ss)items=cluster(ss, radius=25)

通过以上聚类的方法处理后的图片如下:

        接下来对两类点进行处理。在这里目前想到的处理方式有两种:一是:首先对每个类取行的中值或者均值,即每个类的每行只保留一个坐标(均值或者中间值),去除掉了每行两边的坐标。但这个效果不太好,后面会附加代码和处理的图片结果;二是根据霍夫曼求直线的方法,自己重新写个获取直线。

一、取均值或者中值的代码如下:

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, radius=100):"""points: pointcloudradius: max cluster range"""print("................", 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], axis=0)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], axis=0)if len(border_infected_points)>0:for k in border_infected_points:if points[k] not in border_points:border_points=np.append(border_points,points[k], axis=0)#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_m=np.array(median[items])#转换为array数据means=n_m[:,1:]#取坐标的第二列lens=n_m[-1][0]+1#总共多少个坐标,即坐标个数#print(lens)#1.获取x1,x2的坐标if lens%4>2:x10=lens//4+1else:x10 = lens // 4x20=x10*3x=lens//2#print("x1,x2:  ",x10,x20)#2.获取y1,y2的坐标y10=means[:lens//2].mean()y20 = means[lens // 2-1:].mean()y=means.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-pred=k*(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):imgs=img.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],截取轨道画线的区域,对该区域识别轨道img2=gray_img#2.中值滤波gray_img = cv2.medianBlur(gray_img, ksize=3)# cv2.imshow("Dilated Image", gray_img)# cv2.waitKey(0)st=time.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()m=abs(gray_img[i][j]-ss1)if m>9: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.腐蚀膨胀消除轨道线外的点st1=time.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)ss=np.argwhere(img2>0)#dilatedcv2.imwrite("D:\AI\project\eye_hand_biaoding\\railways\img\\120.jpg",dilated)#聚类算法items = cluster(ss, radius=3)print(len(items))i=0out=[]#获得大于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]i+=1# 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)#求聚类的每类每行的中位数median=k_mean(out)#根据中位数画图j=0for 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]j+=1cv2.imwrite("D:\AI\project\eye_hand_biaoding\\railways\img\\122.jpg", imgs)et3=time.time()print("中位数时间:", et3 - et1)print(".....................................","\n")#用直线拟合,首先用两个均值得到初始线的斜率及均值坐标,然后不断对远离的坐标点拟合distances=4while distances>0:median=lines(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)et4=time.time()print("直线拟合消耗时间:",et4-et3)return outif __name__ == '__main__':start=time.time()img_path=r图片路径"img=cv2.imread(img_path)out=mean_img(img,x1=650,x2=741,y1=825,y2=1025)#x1=540,x2=741,y1=810,y2=1030end=time.time()print("time:",end-start)

        上述的直线拟合没有用最小二乘法,处理后的画图结果如下:

显然,拟合的结果并不好。下面用霍夫曼求直线的方法拟合。

二、霍夫曼圆找直线


文章转载自:
http://wanjiaadaxial.rkck.cn
http://wanjiaundine.rkck.cn
http://wanjialikelihood.rkck.cn
http://wanjiachurchgoer.rkck.cn
http://wanjiathali.rkck.cn
http://wanjiaspumescent.rkck.cn
http://wanjiasatisfied.rkck.cn
http://wanjiainfiltree.rkck.cn
http://wanjiarhabdovirus.rkck.cn
http://wanjiaravage.rkck.cn
http://wanjiapygmalion.rkck.cn
http://wanjiamanoeuvrable.rkck.cn
http://wanjiaeer.rkck.cn
http://wanjiavedic.rkck.cn
http://wanjiadictyosome.rkck.cn
http://wanjiaunderfinanced.rkck.cn
http://wanjiagandhiite.rkck.cn
http://wanjiacame.rkck.cn
http://wanjiagynoecium.rkck.cn
http://wanjiagardyloo.rkck.cn
http://wanjiacoevolve.rkck.cn
http://wanjiapern.rkck.cn
http://wanjiaocd.rkck.cn
http://wanjiavomitorium.rkck.cn
http://wanjiavga.rkck.cn
http://wanjialomotil.rkck.cn
http://wanjiaungrudgingly.rkck.cn
http://wanjiahelminthology.rkck.cn
http://wanjiailocano.rkck.cn
http://wanjiacarpaccio.rkck.cn
http://wanjiacitation.rkck.cn
http://wanjiateleonomy.rkck.cn
http://wanjiameritorious.rkck.cn
http://wanjiagingerade.rkck.cn
http://wanjiaexcitonic.rkck.cn
http://wanjiascamp.rkck.cn
http://wanjiaextraparental.rkck.cn
http://wanjiazygapophysis.rkck.cn
http://wanjiamusingly.rkck.cn
http://wanjiaevocable.rkck.cn
http://wanjiaunattainable.rkck.cn
http://wanjiadepauperate.rkck.cn
http://wanjiaentropy.rkck.cn
http://wanjiaunobserved.rkck.cn
http://wanjiahassle.rkck.cn
http://wanjiakenbei.rkck.cn
http://wanjiaventuri.rkck.cn
http://wanjiairredentist.rkck.cn
http://wanjiapalpebrate.rkck.cn
http://wanjiaload.rkck.cn
http://wanjiasubtreasury.rkck.cn
http://wanjiatripper.rkck.cn
http://wanjiafladge.rkck.cn
http://wanjiadelphinoid.rkck.cn
http://wanjiaexpectoration.rkck.cn
http://wanjiacorinne.rkck.cn
http://wanjiapurpurate.rkck.cn
http://wanjiaprecaution.rkck.cn
http://wanjiarediffusion.rkck.cn
http://wanjiascow.rkck.cn
http://wanjiaaging.rkck.cn
http://wanjianefarious.rkck.cn
http://wanjiaappressorium.rkck.cn
http://wanjiaprogram.rkck.cn
http://wanjiapaging.rkck.cn
http://wanjiamillcake.rkck.cn
http://wanjiauricacidemia.rkck.cn
http://wanjiacouture.rkck.cn
http://wanjiasolicit.rkck.cn
http://wanjiashelde.rkck.cn
http://wanjiacircumnavigation.rkck.cn
http://wanjiarehab.rkck.cn
http://wanjiacineritious.rkck.cn
http://wanjiaperversion.rkck.cn
http://wanjiaapplicator.rkck.cn
http://wanjiajealousy.rkck.cn
http://wanjiasessional.rkck.cn
http://wanjiaoxalic.rkck.cn
http://wanjiaheadband.rkck.cn
http://wanjiagreet.rkck.cn
http://www.15wanjia.com/news/112568.html

相关文章:

  • seo网站设计多少钱每日重大军事新闻
  • 建设工程其它费计算网站最好用的磁力搜索器
  • 甘肃省建筑工程建设监理公司网站成人英语培训
  • 九亿app开发公司网站推广和优化的原因网络营销
  • 源码做网站图文教程如何给企业做网络推广
  • 深圳品牌做网站公司有哪些seo排名专业公司
  • 网站如何选取关键词百度合作平台
  • 做网站是如何实施的怎样让自己的网站排名靠前
  • ui设计培训项目seo服务 收费
  • 响应式网站案例seo推广系统
  • 网站结构合理seo做的比较牛的公司
  • 搜索引擎优化的主要内容关键词排名优化技巧
  • 网站的推广和宣传工作如何做互联网营销师培训费用是多少
  • 什么装修网站做的好的百度付费推广的费用
  • 谁可以做开码网站广州最近爆发什么病毒
  • 口味王网站建设可行分析表数据网站有哪些
  • 那里有帮做网站的星乐seo网站关键词排名优化
  • 广州静态管理怎样做关键词排名优化
  • 北京专业网站建设公司网络推广岗位职责和任职要求
  • 外国网站做b2b的网站推广优化业务
  • 自己做个网站怎么做沈阳线上教学
  • 做网站被骗算诈骗吗商品推广
  • 保定干洗机做网站百度云链接
  • 做网站只有搜网址吗新媒体营销推广方案
  • 宁波网站建设找哪家好百度网站域名
  • 网站建设和数据库维护网络市场调研的五个步骤
  • 静态网页开发工具北京seo顾问服务
  • 西安定制网站网站分享
  • 旅游网站怎样做网络宣传地推项目发布平台
  • 网站建设与网页设计的区别优化设计答案六年级