opencv 检测直线,python中的opencv

  opencv 检测直线,python中的opencv

  在图像处理中,直线检测是一种常用的算法,通常是获得N个边缘点的集合,并找到通过这些边缘点的直线。本文将介绍如何在Python中使用OpenCV检测直线,以供参考。

  00-1010 1.导言2。霍夫变换3。举个栗子3.1读取图像进行灰度化3.2进行边缘检测3.3补充霍夫变换。

  

目录

 

  在图像处理中,直线检测是一种常用的算法,通常是获得N个边缘点的集合,并找到通过这些边缘点的直线。其中,最流行的直线检测器是基于Hough变换的直线检测技术。

  

1. 引言

 

  Hough变换是图像处理中的一种特征提取方法,可以识别图像中的几何形状。它将在参数空间中投票以确定其对象的形状。通过检测累加的结果,它会找到一个最大值对应的解,利用这个解,它可以得到一个符合特定形状的参数。

  在使用Hough变换检测直线之前,首先要使用边缘检测算法减少图像中的数据量,剔除无关信息,保留图像中重要的结构特征。

  

2. 霍夫变换

 

  

3. 举个栗子

 

  首先,我们读入样本测试图像,然后使用cvtColor()函数进行灰度操作。示例代码如下:

  im=cv2.imread(。/ladder . png’)

  gray_img=cv2.cvtColor(im,cv2。COLOR_BGR2GRAY)

  运行结果如下:

  上图中,左侧为原始彩色图像,右侧为灰度化后的灰度图像。

  

3.1 读入图像 进行灰度化

 

  接下来,我们使用边缘检测算法(Canny,Sobel,Laplacian等。)来检测物体的边缘。示例代码如下:

  canny=cv2。Canny(gray_img,30,150)

  运行结果如下:

  

3.2 执行边缘检测

 

  最后,利用Hough变换得到直线检测结果。示例代码如下:

  lines=cv2。HoughLines(canny,1,np.pi/180,180)

  lines1=lines[:0,]

  对于,在第1行[:]:

  a=NP . cos()

  b=NP . sin()

  x0=a * rho

  y0=b * rho

  x1=int(x0 3000 * (-b))

  y1=int(y0 3000 * (a))

  x2=int(x0-3000 *(b))

  y2=int(y0 - 3000 * (a))

  cv2.line(im,(x1,y1),(x2,y2),(0,0,255),2)

  运行结果如下:

  可以看出,通过简单的几步,我们可以很容易地检测出图像中的所有直线。

  

3.3 进行霍夫变换

 

  当然,Python使用OpenCV不仅可以检测直线,还可以检测直线的倾斜角度。下面是实现的核心代码。

  导入cv2

  将numpy作为np导入

  定义线_检测(图像):

  #将图片转换为HSV

  hsv=cv2.cvtColor(image,cv2。COLOR_BGR2HSV)

  #设置阈值

  lowera=np.array([0,0,221])

  uppera=np.array([180,30,255])

  mask1=cv2.inRange(hsv,lowera,uppera)

  kernel=np.ones((3,3),np.uint8)

  #对获得的图像执行形态学运算(闭运算和开运算)。

  Mask=cv2。形态学ex (mask1,cv2。morphology _ close,kernel) # close操作:表示先进行膨胀操作,再进行腐蚀操作。

  Mask=cv2。形态学ex(掩模,cv2。morphology _ open,kernel) # open操作:表示先腐蚀,再膨胀。

  #绘制轮廓

  边缘=cv2。Canny(遮罩,50,150,孔径大小=3)

  #显示图片

  cv2.imshow(edges ,edges)

  #检测白线这里是检测直线的条件。您可以读取HoughLinesP()函数,然后根据自己的要求设置检测条件。

  lines=cv2。HoughLinesP(edges,1,np.pi/180,40,minLineLength=10,maxLineGap=10)

  打印“lines=”,行

  打印==============================================

  i=1

  #遍历通过霍夫变换获得的数据。

  对于线路:中的线路

  # newlines1=lines[:0,]

  print line[ str(i-1) ]=,行

  X1,y1,x2,y2=line[0] #两点确定一条直线,这里是通过遍历得到的两点的数据(x1,y1)(x2,y2)。

  2.CVLINE (image,(x1,y1),(x2,y2),(0,0,255),2) #在原始图像上画一条线

  #转换成浮点数并计算斜率

  x1=浮点型(x1)

  x2=浮点型(x2)

  y1=浮点型(y1)

  y2=浮点型(y2)

  打印 x1=%s,x2=%s,y1=%s,y2=%s % (x1,x2,y1,y2)

  如果x2 - x1==0:

  打印“直线是垂直的”

  结果=90

  elif y2 - y1==0 :

  打印“直线是水平的”

  结果=0

  else:

  #计算斜率

  k=-(y2 - y1)/(x2 - x1)

  #求反正切,然后把弧度换算成度。

  结果=np.arctan(k) * 57.29577

  打印直线的倾角是: str(结果)度

  i=i 1

  #展示最终结果图。

  cv2.imshow(line_detect ,image)

  回送结果

  if __name__==__main__:

  #读入图片

  src=cv2 . im read( lines/line 6 . jpg )

  #设置窗口大小

  cv2.namedWindow(输入图像,cv2。WINDOW_AUTOSIZE)

  #展示原图

  cv2.imshow(输入图像,src)

  #呼叫功能

  线路检测(src)

  cv2.waitKey(0)

  关于在Python中使用OpenCV进行行检测的详细解释,本文到此结束。关于Python OpenCV线检测的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • opencv图像识别数字,opencv 识别
  • opencv图像识别数字,opencv 识别,如何基于opencv实现简单的数字识别
  • opencv图像的旋转角度计算,opencv图像仿射变换
  • opencv图像的旋转角度计算,opencv图像仿射变换,OpenCV图像几何变换之透视变换
  • opencv图像的旋转角度计算,opencv 旋转任意角度
  • opencv图像的旋转角度计算,opencv 旋转任意角度,opencv图片的任意角度旋转实现示例
  • opencv图像处理函数,opencv图像轮廓合并
  • opencv图像处理函数,opencv图像轮廓合并,OpenCV图像处理之七种常用图像几何变换
  • opencv双线性插值函数,opencv 图像插值
  • LBPH人脸识别,基于opencv的人脸识别技术
  • LBPH人脸识别,基于opencv的人脸识别技术,Opencv LBPH人脸识别算法详解
  • ,,OpenCV黑帽运算(BLACKHAT)的使用
  • opencv双线性插值函数,opencv 图像插值,C++ OpenCV实现图像双三次插值算法详解
  • ,,C语言 OpenCV实现柱面投影
  • ,,C++ Opencv imfill孔洞填充函数的实现思路与代码
  • 留言与评论(共有 条评论)
       
    验证码: