使用LabVIEW AI视觉工具包快速实现霍夫圆和霍夫直线检测(含源码) 您所在的位置:网站首页 opencv识别物体并输出坐标点全过程 使用LabVIEW AI视觉工具包快速实现霍夫圆和霍夫直线检测(含源码)

使用LabVIEW AI视觉工具包快速实现霍夫圆和霍夫直线检测(含源码)

2023-05-30 14:12| 来源: 网络整理| 查看: 265

‍‍🏡博客主页: virobotics的CSDN博客:LabVIEW深度学习、人工智能博主 🎄所属专栏:『LabVIEW深度学习实战』 🍻上期文章: 手把手教你使用LabVIEW人工智能视觉工具包快速实现Harris角点检测(含源码) 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀! 欢迎大家✌关注、👍点赞、✌收藏、👍订阅专栏

文章目录 前言一、环境搭建1.1 部署本项目时所用环境1.2 LabVIEW工具包下载及安装 二、霍夫直线检测2.1 霍夫直线检测原理简介2.2 python实现霍夫直线检测2.3 LabVIEW实现霍夫直线检测 三、霍夫圆检测3.1 霍夫圆检测原理3.2 python实现霍夫圆检测3.3 LabVIEW实现霍夫圆检测 四、项目源码总结

前言

今天我们一起来使用LabVIEW AI视觉工具包快速实现霍夫圆和霍夫直线的检测。工具包的安装与下载方法可见之前的两篇博客。

一、环境搭建 1.1 部署本项目时所用环境 操作系统:Windows10python:3.6及以上LabVIEW:2018及以上 64位版本AI视觉工具包:techforce_lib_opencv_cpu-1.0.0.98.vip 1.2 LabVIEW工具包下载及安装 AI视觉工具包下载与安装参考: https://blog.csdn.net/virobotics/article/details/123656523 二、霍夫直线检测 2.1 霍夫直线检测原理简介

霍夫直线检测过程,是将笛卡尔坐标系下的直线方程转换到极坐标系下,并根据各个像素的坐标点代入得到的方程,获取对应的直线参数. 直线可以分别用直角坐标系和极坐标系来表示:那么经过某个点(x0,y0)的所有直线都可以用这个式子来表示: y0 =kx0+b。也就是说每一个(r,θ)都表示一条经过(x0,y0)直线,那么同一条直线上的点必然会有同样的(r,θ)。如果将某个点所有的(r,θ)绘制成下面的曲线,那么同一条直线上的点的(r,θ)曲线会相交于一点: 在这里插入图片描述

2.2 python实现霍夫直线检测

0️⃣API

lines = cv2.HoughLines(image, rho, theta, thresh)

1️⃣参数

image:检测的图像,要二值化的图像,检测前需要先对图像进行二值化处理或是canny边缘检测,推荐使用canny边缘检测的结果图像。rho:以像素为单位累加器的分辨距离值,推荐用1.0。theta:以用弧度表示的角度, 推荐用numpy.pi/180 。thresh:累加器阈值参数,超过设定阈值才被检测出线段,值越大,检出的线段越长,检出的线段个数越少。推荐先用100

返回值:

lines:输出检测到的直线的向量,每条直线用(r,θ)表示。r表示直线到原点(就是图片的左上角)的距离。θ表示直线的旋转角度。

2️⃣实现霍夫直线检测

import cv2 import numpy as np img = cv2.imread("linegraph.jpg") #读取图片文件 cv2.namedWindow("Image") cv2.imshow("Image", img) #显示该图片内容 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray, 90, 110) cv2.imshow('edges', edges) # 霍夫变换 lines = cv2.HoughLines(edges, 1, np.pi/180,150) img1 = img.copy() # 将检测的线绘制在图像上(注意是极坐标噢) for line in lines: rho,theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a * rho y0 = b * rho x1 = int(x0 + 1000 * (-b)) y1 = int(y0 + 1000 * (a)) x2 = int(x0 - 1000 * (-b)) y2 = int(y0 - 1000 * (a)) cv2.line(img1, (x1, y1), (x2, y2), (255, 255, 0), 2) cv2.imshow('img1', img1) cv2.waitKey (0) #等待一定时间,让显示内容可以被看到 cv2.destroyAllWindows() #关闭所有显示框

3️⃣运行结果 在这里插入图片描述

2.3 LabVIEW实现霍夫直线检测

0️⃣相关VI及参数介绍

HoughLines.vi:检测图片中的直线在这里插入图片描述

参数说明:

Mat in:检测的图像,要二值化的图像parameters簇中参数含义:rho:以像素为单位累加器的分辨距离值,推荐用1.0。theta:以用弧度表示的角度, 推荐用pi/180 。thresh:累加器阈值参数,超过设定阈值才被检测出线段,值越大,检出的线段越长, 检出的线段个数越少。输出 lines:输出检测到的直线的向量

Draw_Line.vi:绘制直线 在这里插入图片描述

参数说明:

Mat:要绘制直线的图像pt1,pt2: 直线的起点和终点color: 线条的颜色thickness: 线条宽度

Canny.vi:边缘检测 在这里插入图片描述

参数说明:

Mat in:灰度图,threshold1: minval,较小的阈值将间断的边缘连接起来threshold2: maxval,较大的阈值检测图像中明显的边缘

1️⃣实现霍夫直线检测 在这里插入图片描述 2️⃣运行结果 在这里插入图片描述

三、霍夫圆检测 3.1 霍夫圆检测原理

霍夫圆变换跟直线变换类似,线是用(r,θ)表示,圆则是用(x_center,y_center,r)来表示,从二维变成了三维,数据量变大很多,一般使用霍夫梯度法减少计算量。

3.2 python实现霍夫圆检测

0️⃣API

cv2.HoughCircles(image, method, dp, minDist, param1=100, param2=100, minRadius=0,maxRadius=0 )

1️⃣参数

image:输入图像method:使用霍夫变换圆检测的算法,它的参数是CV_HOUGH_GRADIENTdp :霍夫空间的分辨率,dp=1时表示霍夫空间与输入图像空间的大小一致,dp=2时霍夫空间是输入图像空间的一半,以此类推minDist为圆心之间的最小距离,如果检测到的两个圆心之间距离小于该值,则认为它们是同一个圆心param1:边缘检测时使用Canny算子的高阈值,低阈值是高阈值的一半。param2:检测圆心和确定半径时所共有的阈值minRadius和maxRadius为所检测到的圆半径的最小值和最大值

返回:

circles:输出圆向量,包括三个浮点型的元素——圆心横坐标,圆心纵坐标和圆半径

2️⃣实现霍夫圆检测

import cv2 import numpy as np img = cv2.imread("shapes.jpg") #读取图片文件 cv2.namedWindow("Image") cv2.imshow("Image", img) #显示该图片内容 gray = img[:,:,2]#cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #图片转换为灰度格式 ##cv2.imshow('gray',gray) ret,thresh1 = cv2.threshold(gray,100,255,cv2.THRESH_BINARY) edges = cv2.Canny(thresh1, 90,110) #对图片进行边缘检测 cv2.imshow('HoughCircle',edges) #通过HoughCircles方法检测圆形 circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, 1, 100, param2=22, maxRadius=100,minRadius=30) #在图片中标识出找到的直线 for i in circles[0, :]: cv2.circle(img, (int(i[0]), int(i[1])), int(i[2]), (0, 255, 0), 2) # 画出外圆 cv2.circle(img, (int(i[0]), int(i[1])), 2, (0, 0, 255), 3) # 画出圆心 cv2.imshow('HoughCircle',img) cv2.waitKey (0) #等待一定时间,让显示内容可以被看到 cv2.destroyAllWindows() #关闭所有显示框

3️⃣运行结果 在这里插入图片描述

3.3 LabVIEW实现霍夫圆检测

0️⃣相关VI及参数介绍

HoughCircles.vi:检测图片中的圆 在这里插入图片描述

参数介绍:

Mat in:检测的图像,要二值化的图像parameters簇中参数含义:method:使用霍夫变换圆检测的算法,它的参数是3dp :霍夫空间的分辨率,dp=1时表示霍夫空间与输入图像空间的大小一致,dp=2时霍夫空间是输入图像空间的一半,以此类推minDist为圆心之间的最小距离,如果检测到的两个圆心之间距离小于该值,则认为它们是同一个圆心param1:边缘检测时使用Canny算子的高阈值,低阈值是高阈值的一半。param2:检测圆心和确定半径时所共有的阈值minRadius和maxRadius为所检测到的圆半径的最小值和最大值输出circles:输出圆向量

Draw_Circle.vi:绘制圆

在这里插入图片描述

参数介绍:

Mat:要绘制直线的图像center,radius: 圆心和半径color: 线条的颜色thickness: 线条宽度

1️⃣实现霍夫圆检测 在这里插入图片描述

2️⃣运行结果 在这里插入图片描述

四、项目源码

项目源码下载:https://download.csdn.net/download/virobotics/87794021

总结

以上就是今天要给大家分享的内容,希望对大家有用。我们下篇文章见~

如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏

推荐阅读

LabVIEW图形化的AI视觉开发平台(非NI Vision),大幅降低人工智能开发门槛 LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介 LabVIEW AI视觉工具包OpenCV Mat基本用法和属性 手把手教你使用LabVIEW人工智能视觉工具包快速实现图像读取与采集 👇技术交流 · 一起学习 · 咨询分享,请联系👇



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有