首页 > 编程语言 >实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)

时间:2022-12-01 10:07:29浏览次数:68  
标签:set angle center -- cv2 dev Halcon 源码 255



导读

本文给大家分享一个电感元件定位实例,并附Halcon和OpenCV实现步骤和代码。(公众号:OpenCV与AI深度学习)

 背景介绍

    本实例来源于EmguCV学员交流群,已经同意使用图片做演示。

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_深度学习


如上图所示线圈电感元件,目标是定位元件中心位置然后用机械手抓取,精度要求不是很高,但由于线圈纹路影响,匹配效果不太好,这里演示用Blob分析的方法来定位。最终效果如下:

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_公众号_02

 实现步骤与演示

【1】转为灰度图 + 二值化:

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_常用函数_03

【2】孔洞填充(可参考以下历史文章):

​OpenCV技巧 | 二值图孔洞填充方法与实现(附源码)​

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_常用函数_04

【3】形态学开运算(可参考以下历史文章):

​OpenCV形态学处理使用技巧与应用演示​

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_深度学习_05

【4】计算中心和角度并绘制:

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_公众号_02

Halcon实现源码与其他图片测试:

dev_get_window (WindowHandle)
read_image (Image, './imgs/1 (5).jpg')
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 0, 230)
fill_up (Regions, RegionFillUp)


dev_set_color ('blue')
dev_set_draw ('margin')
dev_set_line_width (2)
opening_rectangle1 (RegionFillUp, RegionOpening, 70, 70)
dev_display (Image)
select_shape (RegionOpening, SelectedRegions, 'area', 'and', 200000, 500000)


orientation_region (SelectedRegions, Phi)
area_center (SelectedRegions, Area, Row, Column)
dev_set_line_width (3)
dev_set_draw ('margin')
Length := 400
dev_set_color ('red')
dev_set_line_width (2)
disp_arrow (WindowHandle, Row, Column, Row - Length * sin(Phi), Column + Length * cos(Phi), 4)
disp_message (WindowHandle, deg(Phi)$'3.1f' + ' deg', 'image', Row, Column - 20, 'green', 'false')
dev_update_window ('on')

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_常用函数_07

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_公众号_08

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_常用函数_09

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_深度学习_10

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_常用函数_11

OpenCV实现步骤与测试:

【1】二值化:

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_,thres = cv2.threshold(gray,220,255,cv2.cv2.THRESH_BINARY_INV)

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_公众号_12

【2】孔洞填充:

def fill_up(thres):
img_out = thres.copy()
contours,hierarchy = cv2.findContours(thres, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(img_out,contours,-1,(255,255,255),-1)
return img_out

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_常用函数_13

【3】形态学开运算:

k1=np.ones((70,70), np.uint8)
opening = cv2.morphologyEx(filled, cv2.MORPH_OPEN, k1)

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_常用函数_14

【4】计算中心和角度并标示:

contours,hierarchy = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
for cnt in contours:
area = cv2.contourArea(cnt)
if(area>20000):
cv2.drawContours(result,cnt,-1,(255,0,0),2)
M = cv2.moments(cnt)
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])#轮廓重心
center = (cx,cy)

rect = cv2.minAreaRect(cnt)
angle = rect[2]
print(angle)
box = cv2.boxPoints(rect)
box = np.int0(box)
img = cv2.drawContours(result,[box],0,(0,0,255),1)
angle = get_angle(box,center)
print(angle)
ptEnd = get_end_point(center,angle,cnt)
#cv2.circle(result,ptEnd,5,(255,0,255),-1)
cv2.arrowedLine(result,center,ptEnd,(0, 255, 0),thickness=3, line_type=cv2.LINE_4,
shift=0, tipLength=0.08)
cv2.circle(result,center,5,(0,0,255),-1)
pt_text = (center[0],center[1]-15)
strAngle = '%0.2fdeg'%(-angle+180)
cv2.putText(result,strAngle,pt_text,0,0.7,(0,255,0),2)

---计算角度方式有差异,所以得到的角度不同---

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_深度学习_15

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_深度学习_16

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_公众号_17

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_深度学习_18

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_公众号_19

实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)_深度学习_20



—THE END—


觉得有用,记得点个赞


标签:set,angle,center,--,cv2,dev,Halcon,源码,255
From: https://blog.51cto.com/stq054188/5901157

相关文章

  • OpenCV技巧 | 二值图孔洞填充方法与实现(附源码)
    重磅干货,第一时间送达导读本文主要介绍使用OpenCV对二值图做孔洞填充的方法与实现。背景介绍为什么要做孔洞填充?因为在部分情况下,二值图内部的孔洞和外部轮廓是一个整体,填......
  • iOS 生成证书、描述文件、打包上架Appstore详细流程
    简介我打算将生成证书,描述文件、上架App的步骤一步一步写下来,于是就有了这篇文章编译环境系统版本:macOSSierra10.12.6​​Xcode​​:v9.2(9C40b)1.开发者账号​​苹果官......
  • 软件测试题库小程序推荐 这个免费题库,你用绝对停不下来
    对于已经掌握了如测试基础技能的人来说,最需要的就是进入到软件测试岗位上去工作,但由于面试是从业者必须经历的一个环节,而很多测试人因为也是才好踏入测试边缘,并没有相关的岗......
  • 嵌入式系统的开发概述
    嵌入式系统开发基本流程面向具体应用的嵌入式开发决定了嵌入式开发的方法、流程各有不同,这里仅给出一般的嵌入式开发的具体过程:系统定义与需求分析阶段方案设计阶段详细设计......
  • 双目视觉测距原理,数学推导及三维重建资源
    先说一下单/双目的测距原理区别:单目测距原理:先通过图像匹配进行目标识别(各种车型、行人、物体等),再通过目标在图像中的大小去估算目标距离。这就要求在估算距离之前首先对目......
  • 70篇CVPR 2022 论文解读汇总
    编辑丨极市平台导  读 本文汇总了CVPR2022放出的一些工作的解读,希望能够帮助大家更好的学习。 所有CVPR的论文整理都汇总在了我们的Github项目中,该项目目前已收获8900......
  • 超声波风速传感器_超声波风速风向传感器
    超声波风速传感器又称超声波风速风向传感器、超声波风速风向仪,超声波风速传感器是一款全数字化信号检测,高精度,基于超声波原理研发的风速风向测量仪器,利用发送的声波脉冲,测量......
  • 安全配置错误规避指南
    在2019年,安全研究人员发现AtlassianJIRA中存在安全配置错误,这是一款全球超过100,000家组织和政府机构使用的项目管理软件。JIRA配置错误允许任何人通过简单的搜索查......
  • Spring Cloud GCP 适配器参考
    谷歌云函数GoogleCloudFunctions适配器使SpringCloudFunction应用程序能够在GoogleCloudFunctions无服务器平台上运行。您可以使用开源的GoogleFunctionsFrame......
  • ForexClub:如何确定外汇图表上的心理水平
    交易者通常将这些整数区间称为“双零”,因为这些价格为偶数,例如EUR/USD的1.31000、GBP/USD的1.57000或GBP/JPY的132.00。下图标识了当前美元/日元图表上的“双零......