由于没有待测刹车盘零件的图片,以下程序仅为伪代码,仅供参考。

  1. 标定像素当量值

import cv2

读取标定板图片

img = cv2.imread('calibration_board.jpg')

定义标定板角点数量

rows = 9 cols = 6

提取标定板角点

ret, corners = cv2.findChessboardCorners(img, (rows, cols), None)

标定相机

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera([objpoints], [corners], img.shape[::-1], None, None)

计算像素当量值

pixel_per_mm = 0 for i in range(len(corners)-1): pixel_per_mm += cv2.norm(corners[i+1]-corners[i]) pixel_per_mm /= (len(corners)-1)

  1. 测量小孔直径和相邻孔距离

读取待测图片

img = cv2.imread('brake_disk.jpg')

转换为灰度图

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

阈值分割

ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

轮廓检测

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

遍历轮廓

for cnt in contours: # 过滤面积过小的轮廓 area = cv2.contourArea(cnt) if area < 100: continue # 拟合圆形 (x, y), radius = cv2.minEnclosingCircle(cnt) center = (int(x), int(y)) radius = int(radius) # 绘制圆形 cv2.circle(img, center, radius, (0, 255, 0), 2) # 计算直径和距离 diameter = radius * 2 / pixel_per_mm if diameter > 1 and diameter < 5: print("小孔直径:", diameter) elif diameter > 6 and diameter < 10: print("相邻孔距离:", diameter)

  1. 测量圆周直径

读取待测图片

img = cv2.imread('brake_disk.jpg')

转换为灰度图

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

阈值分割

ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

轮廓检测

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

遍历轮廓

for cnt in contours: # 过滤面积过小的轮廓 area = cv2.contourArea(cnt) if area < 100: continue # 拟合圆形 (x, y), radius = cv2.minEnclosingCircle(cnt) center = (int(x), int(y)) radius = int(radius) # 绘制圆形 cv2.circle(img, center, radius, (0, 255, 0), 2) # 计算圆周直径 if radius > 50 and radius < 60: diameter = radius * 2 / pixel_per_mm print("圆周直径:", diameter)

题目:机器人视觉全自动测量要求:根据待测刹车盘零件上线纹尺的刻度单位:毫米标定出成像测量系统的像素当量值。然后编写OpenCV程序测量:1刹车盘零件上7个小孔的直径;2各相邻孔之间的距离;3外围6个小孔中心所在圆周的直径。请输出基于opencv47的程序实例

原文地址: https://www.cveoy.top/t/topic/bKR7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录