【图像处理】初等的直线检测算法

 时间:2024-10-18 23:08:37

1、线用Canny算子检测图像的边界。img0=cv2.imread('0.png')img=cv2.Canny(img0,0,255)

【图像处理】初等的直线检测算法

2、上图中,除了边界像素等于255,其余都等于0。因此,只统计非零像素。r=int((u**2+v**2)**0.5)acc=np.zeros((r,180))for i in range(u)多唉捋胝: for j in range(v): if img[i,j]!=0: for m in range(1,180): m0=m*np.pi/180 R=int(j*np.cos(m0)+i*np.sin(m0)) if R<r and R>0: acc[R,m]=acc[R,m]+1为了便于查看,转置一下:cv2.imwrite('2.png',acc.T)

【图像处理】初等的直线检测算法

3、画出像素最多的直线:R,m1=np.where(acc==np.max(acc))A=[]for i in range(u)多唉捋胝: for j in range(v): if img[i,j]!=0: for m in range(1,180): m0=m*np.pi/180 h=int(j*np.cos(m0)+i*np.sin(m0)) if h==R and m==m1: A.append((j,i))cv2.line(img0,A[0],A[-1],(0,0,255),2)

【图像处理】初等的直线检测算法

4、用for循环,可以画出那些主要的线段:B=np.reshape(acc,(1,-1拘七呷憎))[0]B=list(set(B))[::-1]for i in range(5): R,m1租涫疼迟=np.where(acc==B[i]) A=[] for i in range(u): for j in range(v): if img[i,j]!=0: for m in range(1,180): m0=m*np.pi/180 h=int(j*np.cos(m0)+i*np.sin(m0)) if h==R and m==m1: A.append((j,i)) cv2.line(img0,A[0],A[-1],(0,0,255),2)有重复吗?

【图像处理】初等的直线检测算法

5、opencv内置的检测直线的算子速度很快:img0=cv2.imread('0.png')lines = cv2.HoughLinesP(img, 1, np.pi/180, 80,30,10)for x1, y1, x2, y2 in lines[0]: cv2.line(img0, (x1, y1), (x2, y2), (0,255,0), 2)cv2.imwrite('2.png',img0)

【图像处理】初等的直线检测算法

6、想多画几条线段?img0=cv2.imread('0.png')lines = cv2.HoughLinesP(img, 1, np.pi/180, 80,30,10)for i in lines[:20]: #或者100 for x1, y1, x2, y2 in i: cv2.line(img0, (x1, y1), (x2, y2), (0,255,0), 2)cv2.imwrite('2.png',img0)

【图像处理】初等的直线检测算法
【图像处理】初等的直线检测算法

7、img0=cv2.imread('0.png')img=cv2.Canny(img0,0,50)lines = cv2.HoughLinesP(img, 1, np.pi/180, 80,30,10)for i in lines: for x1, y1, x2, y2 in i: cv2.line(img0, (x1, y1), (x2, y2), (0,255,0), 2)cv2.imwrite('2.png',img0)这里,采用了其它的边界检测阈值。有些东西看起来是直的,但是检测结果显示那不直。

【图像处理】初等的直线检测算法
  • 转速公式n的计算公式是什么
  • 画江湖之不良人正式版隐藏密码攻略,选隐藏英雄
  • 如何优化贷款结构
  • Windows11怎么设置分屏
  • 热门搜索
    消防手抄报 科普手抄报 建党节手抄报 禁毒手抄报内容 节日手抄报 诚实守信手抄报 节约用水手抄报一等奖 传统文化手抄报 清明节手抄报内容 读书手抄报图片