实际上,我正在使用OpenCV和Python开发一个机器视觉项目。

目标:项目的目标是以高精度测量组件的尺寸。

主要硬件:巴斯勒5MP照相机(aca-2500-14gm)

一个红色背光灯(100毫米x 100毫米)(我的组件大小约为60毫米)

实验

因为我正在考虑非常严格的公差限制,所以我首先做了一个精确的研究。我把组件放在背光源上,在不移动部件的情况下拍摄了100张图像(想象一下100帧的视频)。我测量了所有100幅图像的外径。我的毫米/像素比是0.042。我测量了测量的标准偏差,以确定精度,结果是0.03mm,这是不好的。组件和设置都没有接触,因此我希望精度为0.005mm。但我的损失是一个数量级的。我使用OpenCV的Hough圆来计算组件的OD。

代码:import sys

import pickle

import cv2

import matplotlib.pyplot as plt

import glob

import os

import numpy as np

import pandas as pd

def find_circles(image,dp=1.7,minDist=100,param1=50,param2=50,minRadius=0,maxRadius=0):

""" finds the center of circular objects in image using hough circle transform

Keyword arguments

image -- uint8: numpy ndarray of a single image (no default).

dp -- Inverse ratio of the accumulator resolution to the image resolution (default 1.7).

minDist -- Minimum distance in pixel distance between the centers of the detected circles (default 100).

param1 -- First method-specific parameter (default = 50).

param2 -- Second method-specific parameter (default = 50).

minRadius -- Minimum circle radius in pixel distance (default = 0).

maxRadius -- Maximum circle radius in pixel distance (default = 0).

Output

center -- tuple: (x,y).

radius -- int : radius.

ERROR if circle is not detected. returns(-1) in this case

"""

circles=cv2.HoughCircles(image,

cv2.HOUGH_GRADIENT,

dp = dp,

minDist = minDist,

param1=param1,

param2=param2,

minRadius=minRadius,

maxRadius=maxRadius)

if circles is not None:

circles = circles.reshape(circles.shape[1],circles.shape[2])

return(circles)

else:

raise ValueError("ERROR!!!!!! circle not detected try tweaking the parameters or the min and max radius")

def find_od(image_path_list):

image_path_list.sort()

print(len(image_path_list))

result_df = pd.DataFrame(columns=["component_name","measured_dia_pixels","center_in_pixels"])

for i,name in enumerate(image_path_list):

img = cv2.imread(name,0) # read the image in grayscale

ret,thresh_img = cv2.threshold(img, 50, 255, cv2.THRESH_BINARY_INV)

thresh_img = cv2.bilateralFilter(thresh_img,5,91,91) #smoothing

edges = cv2.Canny(thresh_img,100,200)

circles = find_circles(edges,dp=1.7,minDist=100,param1=50,param2=30,minRadius=685,maxRadius=700)

circles = np.squeeze(circles)

result_df.loc[i] = os.path.basename(name),circles[2]*2,(circles[0],circles[1])

result_df.sort_values("component_name",inplace=True)

result_df.reset_index(drop=True,inplace=True)

return(result_df)

df = find_od(glob.glob("./images/*"))

mean_d = df.measured_dia_pixels.mean()

std_deviation = np.sqrt(np.mean(np.square([abs(x-mean_d) for x in df.measured_dia_pixels])))

mm_per_pixel = 0.042

print(std_deviation * mm_per_pixel)

输出:0.024

组件的图像:

由于图像是在不干扰设置的情况下拍摄的,我预计测量的重复性大约为0.005mm(5微米)(对于100个图像),但事实并非如此。这是hough圆的问题吗?或者我在这里遗漏了什么

python 机器视觉测量_用Opencv python实现精密测量相关推荐

  1. opencv和python的区别_所有这些OpenCV Python接口之间有何不同?

    拉风的咖菲猫 OpenCV正式发布了两种类型的Python接口,cv和cv2.简历:我开始工作cv.这样,所有OpenCV数据类型都将保留下来.例如,加载时,图像的格式cvMat与C ++中的相同.对 ...

  2. python笔记图片_图像 opencv - python笔记

    默认 基础变换 模糊 锐化 色彩分层 傅里叶变换 高通低通 图像序列转换为视频 人脸识别 import opencv as cv2 img = cv2.imread('test.jpg') # imw ...

  3. python凹多边形分割_使用Opencv python从Image中裁剪凹面多边形

    Steps find region using the poly points create mask using the poly points do mask op to crop add whi ...

  4. python布尔表达式模板_使用OpenCV python从手绘逻辑门图中生成布尔表达式

    您的项目看起来很酷,所以我花了一些时间寻找解决方案.我在下面的代码.代码的结果是: OUTPUT[XNOR[NOR[AND[B,A],OR[D,C]],XOR[NOT[G],NAND[E,F]]]] ...

  5. python opencv显示图片一闪而过_解决Opencv+Python cv2.imshow闪退问题

    Opencv+Python cv2.imshow闪退 # 读入原始图像 origineImage = cv2.imread('./pic/6.jpeg') # 图像灰度化 # image = cv2. ...

  6. python len函数_知识清单Python必备的69个函数,你掌握了吗?

    本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...

  7. ocr python opencv_如何使用(opencv/python)来实现OCR处

    今天我们来介绍一下如何使用(opencv/python)来实现OCR处理银行票据.文末有代码和相关文档下载! 在第一部分中,我们将讨论两个主题: 1.首先,我们将了解MICR E-13B字体,美国,英 ...

  8. python优化网站_[练习] 用PYTHON来优化网站中的图片

    我到公司以来,第一次加班,哇,加一晚上加一上午,现在还没下班的迹象,555,困. 对于网站中的一些关键的页面,多重缓存.静态化.程序代码优化--之外,为了提高用户打开页面的速度,图片是必须要优化的. ...

  9. python递归函数例题_递归案例python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而对应的中文翻译 "递归" 却表达了两个意思:"递 ...

  10. 网易图灵学院python公开课_图灵学院 Python全系列教程全栈工程师 python视频教程下载...

    大家怎么说? 老师很好,我认为,若想学好python,应该多练.多想.多看.学习资料不能仅限于老师给定的这些内容,这些毕竟是入门资料 老师讲的真不错,对于我们这种小白来说 也比较容易懂,虽然有些时候自 ...

最新文章

  1. linux内存布局及页面映射
  2. c语言选择题库和解系,OC单个对象归档和解档关键类和方法名
  3. 大数据面试题及答案 100道 (2021最新版)
  4. dataframe如何理解df[df[‘type‘]==‘xType‘]
  5. php拆分jsion_PHP拆分YAPI导出的swagjson文件
  6. python中from import用法_python学习--Python之import与from...import的区别与用法
  7. arcgis中字段计算器利用python比较大小
  8. 我对 OneData 数据中台体系架构的一些思考
  9. jenkins支持PHP,jenkins发布php代码
  10. 再见,Python!骨灰级程序员:用对这个方法,编程能力暴增!
  11. 面向对象7:项目二的总结
  12. 鸿鹄系统和鸿蒙系统电脑,荣耀智慧屏发布:首发鸿鹄818处理器及鸿蒙系统,定价3799元起...
  13. 大数运算——模加减运算
  14. 如何批量等比例缩放图片尺寸?
  15. wifi和wlan有什么区别
  16. 打包报错:Unable to find a single main class from the following candidates
  17. 青岛科技大学古典音乐考试需要的资料
  18. 如何在线判断一个文件是否安全? 在线沙箱 / 文件分析系统 / 在线查毒 / 云运行截图
  19. Masked GCN论文解读
  20. 计算机没有显示远程桌面连接,连接远程桌面时出现:“这台计算机没有远程桌面客户端访问许可”,怎么处理?...

热门文章

  1. 征服面试官的50道Redis高频通关面试题
  2. 所有图片类型后缀汇总
  3. python图标变成了白色_桌面图标上有个白色文件图标怎么去掉?解决桌面图标白色方块挡住...
  4. wpf后台设置颜色(背景色,前景色)
  5. IDEA - 官方定制主题,Dark Purple theme,Cyan Light Theme,Gray Theme
  6. 在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
  7. 【coq】函数语言设计 练习题inductionlists 总结
  8. python自然语言处理实战源代码下载_NLP学习:涂铭《Python自然语言处理实战核心技术与算法》PDF+源代码...
  9. 交换游戏(记忆化搜索,状态压缩,位运算)
  10. ESP8266-Arduino杀手?