返回顶部
首页 > 资讯 > 后端开发 > Python >双目三维测距(python)
  • 105
分享到

双目三维测距(python)

双目测距三维测距python 2023-09-10 18:09:13 105人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 1. 双目检测1.1 调用相机1.2 分割画面 2. 双目标定2.1 相机标定2.2 获取参数 3. 双目测距3.1 立体校正3.1.1 校正目的3.1.2 校正方法3.1.

文章目录

代码打包下载:
链接1:https://download.csdn.net/download/qq_45077760/87680186
链接2:https://github.com/up-up-up-up/Binocular-ranging(GitHub)

本文是实现某一个像素点的测距,想用yolov5实现测距的,请移步👉这篇文章

1. 双目检测

1.1 调用相机

打开相机,测试双目相机两个画面是否正常显示,也可进行棋盘格拍照

import cv2cap =cv2.VideoCapture(1)    # 打开相机,根据设备而定,一般是0或1cap.set(cv2.CAP_PROP_FRAME_WIDTH, 2560)     # 设置相机分辨率 2560x720cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)fourcc = cv2.VideoWriter_fourcc(*'XVID')    # 保存为avi格式out = cv2.VideoWriter('myvideo.avi',fourcc, 20.0,(2560,720))i= 0while True:    ret, frame = cap.read()    if not ret:        print("Can't receive frame (stream end?). Exiting ...")        break    out.write(frame)    cv2.imshow('camera',frame)    key = cv2.waiTKEy(1)    if  key == ord('q') or key == 27:      # 按下q退出程序并保存视频        break    if key == ord("w"):                 # 按下w保存图片    cv2.imwrite("./%d.png" % i, frame)  # 设置拍摄照片的保存路径    print("Save images %d succeed!" % i)    i += 1cap.release()out.release()cv2.destroyAllwindows()

1.2 分割画面

同理把这个代码稍作修改,可以实现拍照功能,由于我这里是zed 2i相机,自带的有sdk,直接调用的api进行拍照,拍照后需要对双目画面进行分割:

from PIL import Imageimport ospath = 'C:/Users/hp/Desktop/1'  # 文件目录# path这个目录处理完之后需要手动更改path_list = os.listdir(path)print(path_list)for i in path_list:  # 截左半张图片    a = open(os.path.join(path, i), 'rb')    img = Image.open(a)    w = img.width  # 图片的宽    h = img.height  # 图片的高    print('正在处理图片', i, '宽', w, '长', h)    box = (0, 0, w * 0.5, h)  # box元组内分别是 所处理图片中想要截取的部分的 左上角和右下角的坐标    img = img.crop(box)    print('正在截取左半张图...')    img.save('L' + i)  # 这里需要对截出的图加一个字母进行标识,防止名称相同导致覆盖    print('L-', i, '保存成功')for i in path_list:  # 截取右半张图片    a = open(os.path.join(path, i), 'rb')    img = Image.open(a)    w = img.width  # 图片的宽    h = img.height  # 图片的高    print('正在处理图片', i, '宽', w, '长', h)    box = (w * 0.5, 0, w, h)    img = img.crop(box)    print('正在截取右半张图...')    img.save('R' + i)    print('R-', i, '保存成功')print("'{}'目录下所有图片已经保存到本文件目录下。".fORMat(path))

2. 双目标定

2.1 相机标定

打开Matlab 上方的工具栏APP,找到图像处理和计算机视觉下的Stereo Camera Calibration工具,打开并将分割后的图片导入
在这里插入图片描述
设置参数,对于一般的相机选择2 Coefficients选项即可,对于大视场相机则选择3 Coefficients选项。拉线删除误差较大的画面:
在这里插入图片描述

2.2 获取参数

在matlab控制台分别输入 stereoParams.CameraParameters1.IntrinsicMatrix 和stereoParams.CameraParameters2.IntrinsicMatrix 获得左右相机的参数,下边填写时请注意进行矩阵的转置
在这里插入图片描述
为了获取左相机的畸变系数:[k1, k2, p1, p2, k3],我们需要分别输入stereoParams.CameraParameters1.RadialDistortion 和 stereoParams.CameraParameters1.TangentialDistortion
在这里插入图片描述
同理分别输入 stereoParams.CameraParameters2.RadialDistortion 和 stereoParams.CameraParameters2.TangentialDistortion 获取右相机的畸变系数:[k1, k2, p1, p2, k3]
在这里插入图片描述
分别输入 stereoParams.RotationOfCamera2 和 stereoParams 来获取双目的旋转矩阵和平移矩阵
在这里插入图片描述
将以上参数填写进stereoconfig.py文件里,注意转置

import numpy as np# 双目相机参数class stereoCamera(object):    def __init__(self):        # 左相机内参        self.cam_matrix_left = np.array([   [479.6018,   -0.0769,  652.6060],                [       0,  478.0229,  352.3870],                [       0,         0,         1]            ])        # 右相机内参        self.cam_matrix_right = np.array([  [489.9354,   0.2789,  641.6219],                [       0,  487.9356,  354.5612],                [       0,         0,         1]            ])        # 左右相机畸变系数:[k1, k2, p1, p2, k3]        self.distortion_l = np.array([[-0.0791, 0.0309, -0.0009, -0.0004, -0.0091]])        self.distortion_r = np.array([[-0.1153, 0.1021, -0.0011,  -0.0005,  -0.0459]])        # 旋转矩阵        self.R = np.array([ [1.0000,  0.0005, -0.0184],[-0.0005,  1.0000, 0.0001],[ 0.0184,  -0.0001,  1.0000]   ])        # 平移矩阵        self.T = np.array([[121.4655], [0.2118], [0.5950]])        # 焦距        self.focal_length = 749.402 # 默认值,一般取立体校正后的重投影矩阵Q中的 Q[2,3]        # 基线距离        self.baseline = 121.4655 # 单位:mm, 为平移向量的第一个参数(取绝对值)

3. 双目测距

测距代码这一块参考这篇博文,将其中的open3D删除,以最简洁的方式展示出来,大致步骤:

双目标定 > 立体校正(含消除畸变) > 立体匹配 > 视差计算 > 深度计算(3D坐标)计算

3.1 立体校正

3.1.1 校正目的

立体校正利用双目标定的内外参数(焦距、成像原点、畸变系数)和双目相对位置关系(旋转矩阵和平移向量),分别对左右视图进行消除畸变和行对准,使得左右视图的成像原点坐标一致、两摄像头光轴平行、左右成像平面共面、对极线行对齐。

校正前的左右相机的光心并不是平行的,两个光心的连线就叫基线,像平面与基线的交点就是极点,像点与极点所在的直线就是极线,左右极线与基线构成的平面就是空间点对应的极平面。
校正后,极点在无穷远处,两个相机的光轴平行。像点在左右图像上的高度一致。这也就是极线校正的目标。校正后做后续的立体匹配时,只需在同一行上搜索左右像平面的匹配点即可,能使效率大大提高。
在这里插入图片描述

3.1.2 校正方法

实验利用OpenCV中的stereoRectify()函数实现立体校正,stereoRectify()函数内部采用的是Bouguet的极线校正算法,Bouguet算法步骤:
1、将右图像平面相对于左图像平面的旋转矩阵分解成两个矩阵Rl和Rr,叫做左右相机的合成旋转矩阵
2、将左右相机各旋转一半,使得左右相机的光轴平行。此时左右相机的成像面达到平行,但是基线与成像平面不平行
3、构造变换矩阵Rrect使得基线与成像平面平行。构造的方法是通过右相机相对于左相机的偏移矩阵T完成的
4、通过合成旋转矩阵与变换矩阵相乘获得左右相机的整体旋转矩阵。左右相机坐标系乘以各自的整体旋转矩阵就可使得左右相机的主光轴平行,且像平面与基线平行
5、通过上述的两个整体旋转矩阵,就能够得到理想的平行配置的双目立体系图像。校正后根据需要对图像进行裁剪,需重新选择一个图像中心,和图像边缘从而让左、右叠加部分最大
校正后的效果图:
在这里插入图片描述

3.1.2 相关代码

def getRectifyTransform(height, width, config):    # 读取内参和外参    left_K = config.cam_matrix_left    right_K = config.cam_matrix_right    left_distortion = config.distortion_l    right_distortion = config.distortion_r    R = config.R    T = config.T    # 计算校正变换    R1, R2, P1, P2, Q, roi1, roi2 = cv2.stereoRectify(left_K, left_distortion, right_K, right_distortion,                          (width, height), R, T, alpha=0)    map1x, map1y = cv2.initUndistortRectifyMap(left_K, left_distortion, R1, P1, (width, height), cv2.CV_32FC1)    map2x, map2y = cv2.initUndistortRectifyMap(right_K, right_distortion, R2, P2, (width, height), cv2.CV_32FC1)    return map1x, map1y, map2x, map2y, Q# 畸变校正和立体校正def rectifyImage(image1, image2, map1x, map1y, map2x, map2y):    rectifyed_img1 = cv2.remap(image1, map1x, map1y, cv2.INTER_AREA)    rectifyed_img2 = cv2.remap(image2, map2x, map2y, cv2.INTER_AREA)    return rectifyed_img1, rectifyed_img2

注意:立体校正前应先进行消除畸变处理

3.2 立体匹配和视差计算

立体匹配也称作视差估计,立体匹配可划分为四个步骤:匹配代价计算、代价聚合、视差计算和视差优化。立体校正后的左右两幅图像得到后,匹配点是在同一行上的,可以使用OpenCV中的BM算法或者SGBM算法计算视差图。由于SGBM算法的表现要远远优于BM算法,因此采用SGBM算法获取视差图。在立体匹配生成视差图后,可以对视差图进行后处理,如滤波,空洞填充等方法,从而改善视差图的视觉效果

相关代码

def stereoMatchSGBM(left_image, right_image, down_scale=False):    # SGBM匹配参数设置    if left_image.ndim == 2:        img_channels = 1    else:        img_channels = 3    blockSize = 3    paraml = {'minDisparity': 0,              'numDisparities': 64,              'blockSize': blockSize,              'P1': 8 * img_channels * blockSize ** 2,              'P2': 32 * img_channels * blockSize ** 2,              'disp12MaxDiff': 1,              'preFilterCap': 63,              'uniquenessRatio': 15,              'speckleWindowSize': 100,              'speckleRange': 1,              'mode': cv2.STEREO_SGBM_MODE_SGBM_3WAY              }    # 构建SGBM对象    left_matcher = cv2.StereoSGBM_create(**paraml)    paramr = paraml    paramr['minDisparity'] = -paraml['numDisparities']    right_matcher = cv2.StereoSGBM_create(**paramr)    # 计算视差图    size = (left_image.shape[1], left_image.shape[0])    if down_scale == False:        disparity_left = left_matcher.compute(left_image, right_image)        disparity_right = right_matcher.compute(right_image, left_image)    else:        left_image_down = cv2.pyrDown(left_image)        right_image_down = cv2.pyrDown(right_image)        factor = left_image.shape[1] / left_image_down.shape[1]        disparity_left_half = left_matcher.compute(left_image_down, right_image_down)        disparity_right_half = right_matcher.compute(right_image_down, left_image_down)        disparity_left = cv2.resize(disparity_left_half, size, interpolation=cv2.INTER_AREA)        disparity_right = cv2.resize(disparity_right_half, size, interpolation=cv2.INTER_AREA)        disparity_left = factor * disparity_left        disparity_right = factor * disparity_right    # 真实视差(因为SGBM算法得到的视差是×16的)    trueDisp_left = disparity_left.astype(np.float32) / 16.    trueDisp_right = disparity_right.astype(np.float32) / 16.    return trueDisp_left, trueDisp_right

3.3 深度计算

得到视差图后,计算像素深度值,公式如下:
depth = ( f * baseline) / disp
其中,depth表示深度图;f表示归一化的焦距,也就是内参中的fx; baseline是两个相机光心之间的距离,称作基线距离;disp是视差值
实验直接利用opencv中的cv2.reprojectImageTo3D()函数计算深度图,代码如下

def getDepthMapWithQ(disparityMap: np.ndarray, Q: np.ndarray) -> np.ndarray:    points_3d = cv2.reprojectImageTo3D(disparityMap, Q)    depthMap = points_3d[:, :, 2]    reset_index = np.where(np.logical_or(depthMap < 0.0, depthMap > 65535.0))    depthMap[reset_index] = 0    return depthMap.astype(np.float32)

测距结果:
在这里插入图片描述

3.4 注意事项

双目测距效果跟很多因素相关,光线强弱、背景杂乱、目标物距离过远过近、标定误差大小都会影响,大家根据自己的情况寻找相关原因,最后希望大家都可以获得一个较好的测距效果

4. 完整代码

import sysimport cv2import numpy as npimport stereoconfig# 预处理def preprocess(img1, img2):         # 彩色图->灰度图    if (img1.ndim == 3):      #判断是否为三维数组        img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)  # 通过OpenCV加载的图像通道顺序是BGR    if (img2.ndim == 3):        img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)    # 直方图均衡    img1 = cv2.equalizeHist(img1)    img2 = cv2.equalizeHist(img2)     return img1, img2# 消除畸变def undistortion(image, camera_matrix, dist_coeff):    undistortion_image = cv2.undistort(image, camera_matrix, dist_coeff)    return undistortion_image# 获取畸变校正和立体校正的映射变换矩阵、重投影矩阵# @param:config是一个类,存储着双目标定的参数:config = stereoconfig.stereoCamera()def getRectifyTransform(height, width, config):    # 读取内参和外参    left_K = config.cam_matrix_left    right_K = config.cam_matrix_right    left_distortion = config.distortion_l    right_distortion = config.distortion_r    R = config.R    T = config.T    # 计算校正变换    R1, R2, P1, P2, Q, roi1, roi2 = cv2.stereoRectify(left_K, left_distortion, right_K, right_distortion,                          (width, height), R, T, alpha=0)    map1x, map1y = cv2.initUndistortRectifyMap(left_K, left_distortion, R1, P1, (width, height), cv2.CV_32FC1)    map2x, map2y = cv2.initUndistortRectifyMap(right_K, right_distortion, R2, P2, (width, height), cv2.CV_32FC1)    return map1x, map1y, map2x, map2y, Q# 畸变校正和立体校正def rectifyImage(image1, image2, map1x, map1y, map2x, map2y):    rectifyed_img1 = cv2.remap(image1, map1x, map1y, cv2.INTER_AREA)    rectifyed_img2 = cv2.remap(image2, map2x, map2y, cv2.INTER_AREA)    return rectifyed_img1, rectifyed_img2# 立体校正检验----画线def draw_line(image1, image2):    # 建立输出图像    height = max(image1.shape[0], image2.shape[0])    width = image1.shape[1] + image2.shape[1]    output = np.zeros((height, width, 3), dtype=np.uint8)    output[0:image1.shape[0], 0:image1.shape[1]] = image1    output[0:image2.shape[0], image1.shape[1]:] = image2    # 绘制等间距平行线    line_interval = 50  # 直线间隔:50    for k in range(height // line_interval):        cv2.line(output, (0, line_interval * (k + 1)), (2 * width, line_interval * (k + 1)), (0, 255, 0), thickness=2,                 lineType=cv2.LINE_AA)    return output# 视差计算def stereoMatchSGBM(left_image, right_image, down_scale=False):    # SGBM匹配参数设置    if left_image.ndim == 2:        img_channels = 1    else:        img_channels = 3    blockSize = 3    paraml = {'minDisparity': 0,              'numDisparities': 64,              'blockSize': blockSize,              'P1': 8 * img_channels * blockSize ** 2,              'P2': 32 * img_channels * blockSize ** 2,              'disp12MaxDiff': 1,              'preFilterCap': 63,              'uniquenessRatio': 15,              'speckleWindowSize': 100,              'speckleRange': 1,              'mode': cv2.STEREO_SGBM_MODE_SGBM_3WAY              }    # 构建SGBM对象    left_matcher = cv2.StereoSGBM_create(**paraml)    paramr = paraml    paramr['minDisparity'] = -paraml['numDisparities']    right_matcher = cv2.StereoSGBM_create(**paramr)    # 计算视差图    size = (left_image.shape[1], left_image.shape[0])    if down_scale == False:        disparity_left = left_matcher.compute(left_image, right_image)        disparity_right = right_matcher.compute(right_image, left_image)    else:        left_image_down = cv2.pyrDown(left_image)        right_image_down = cv2.pyrDown(right_image)        factor = left_image.shape[1] / left_image_down.shape[1]        disparity_left_half = left_matcher.compute(left_image_down, right_image_down)        disparity_right_half = right_matcher.compute(right_image_down, left_image_down)        disparity_left = cv2.resize(disparity_left_half, size, interpolation=cv2.INTER_AREA)        disparity_right = cv2.resize(disparity_right_half, size, interpolation=cv2.INTER_AREA)        disparity_left = factor * disparity_left        disparity_right = factor * disparity_right    # 真实视差(因为SGBM算法得到的视差是×16的)    trueDisp_left = disparity_left.astype(np.float32) / 16.    trueDisp_right = disparity_right.astype(np.float32) / 16.    return trueDisp_left, trueDisp_rightdef getDepthMapWithQ(disparityMap: np.ndarray, Q: np.ndarray) -> np.ndarray:    points_3d = cv2.reprojectImageTo3D(disparityMap, Q)    depthMap = points_3d[:, :, 2]    reset_index = np.where(np.logical_or(depthMap < 0.0, depthMap > 65535.0))    depthMap[reset_index] = 0    return depthMap.astype(np.float32)if __name__ == '__main__':    # 读取图片    iml = cv2.imread('L28.png', 1)  # 左图    imr = cv2.imread('R28.png', 1)  # 右图    if (iml is None) or (imr is None):        print("Error: Images are empty, please check your image's path!")        sys.exit(0)    height, width = iml.shape[0:2]    # 读取相机内参和外参    # 使用之前先将标定得到的内外参数填写到stereoconfig.py中的StereoCamera类中    config = stereoconfig.stereoCamera()    print(config.cam_matrix_left)    # 立体校正    map1x, map1y, map2x, map2y, Q = getRectifyTransform(height, width, config)  # 获取用于畸变校正和立体校正的映射矩阵以及用于计算像素空间坐标的重投影矩阵    iml_rectified, imr_rectified = rectifyImage(iml, imr, map1x, map1y, map2x, map2y)    print(Q)    # 绘制等间距平行线,检查立体校正的效果    line = draw_line(iml_rectified, imr_rectified)    cv2.imwrite('check_rectification.png', line)    # 立体匹配    iml_, imr_ = preprocess(iml, imr)  # 预处理,一般可以削弱光照不均的影响,不做也可以    disp, _ = stereoMatchSGBM(iml, imr, False)  # 这里传入的是未经立体校正的图像,因为我们使用的middleburry图片已经是校正过的了    cv2.imwrite('disaprity.png', disp * 4)    fx = config.cam_matrix_left[0, 0]    fy = fx    cx = config.cam_matrix_left[0, 2]    cy = config.cam_matrix_left[1, 2]    print(fx, fy, cx, cy)    # 计算像素点的3D坐标(左相机坐标系下)    points_3d = cv2.reprojectImageTo3D(disp, Q)  # 参数中的Q就是由getRectifyTransform()函数得到的重投影矩阵    # 设置想要检测的像素点坐标(x,y)    x=640    y=360    print('x:',points_3d[int(y), int(x), 0],'y:',points_3d[int(y), int(x), 1],'z:',points_3d[int(y), int(x), 2])      # 得出像素点的三维坐标,单位mm    print('distance:',(points_3d[int(y), int(x), 0] ** 2 + points_3d[int(y), int(x), 1] ** 2 + points_3d[int(y), int(x), 2] ** 2) ** 0.5)      # 计算距离,单位mm

大致就写到这里,有问题可以在评论区讨论

来源地址:https://blog.csdn.net/qq_45077760/article/details/130091375

--结束END--

本文标题: 双目三维测距(python)

本文链接: https://lsjlt.com/news/402548.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 双目三维测距(python)
    文章目录 1. 双目检测1.1 调用相机1.2 分割画面 2. 双目标定2.1 相机标定2.2 获取参数 3. 双目测距3.1 立体校正3.1.1 校正目的3.1.2 校正方法3.1....
    99+
    2023-09-10
    双目测距 三维测距 python
  • Android双目三维重建:Android双目摄像头实现双目测距
    Android双目三维重建:Android双目摄像头实现双目测距 目录 Android双目三维重建:Android双目摄像头实现双目测距 1.开发版本 2.Android双目摄像头 3.双目相机标定  (1)双目相机标定-Python版  ...
    99+
    2023-09-04
    android 双目测距 android双目测距 android三维重建 三维重建
  • YOLOV5 + 双目测距(python)
    文章目录 YOLOV5 + 双目相机实现三维测距1. 项目流程2. 测距原理3. 代码部分解析4. 实验结果 YOLOV5 + 双目相机实现三维测距 1. zed + yolov7 ...
    99+
    2023-09-01
    三维测距 YOLO 双目测距 人工智能 计算机视觉
  • 双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python
    双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python 目录 双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python 1.项目结构 2. Environment 3.双目相机标定和校准 (0) 双目摄像头 (...
    99+
    2023-09-03
    双目标定 立体校正 三维重建 显示点云 双目测距
  • 双目相机测距原理
    双目相机测距是一种常用的计算机视觉技术,它利用两个摄像头同时拍摄同一场景,通过测量两个摄像头视野中同一物体在图像上的像素差异,从而计算出物体距离的方法。 具体原理如下: 双目相机的构成 双目相机由两个...
    99+
    2023-09-04
    python numpy opencv
  • YOLOv5+单目测距(python)
    YOLOv5+单目测距(python) 1. 相关配置2. 测距原理3. 相机标定3.1:标定方法13.2:标定方法2 4. 相机测距4.1 测距添加4.2 细节修改(可忽略)4.3 主代...
    99+
    2023-09-12
    YOLO 三维测距
  • 双目视觉目标追踪及三维坐标获取—python(代码)
    2022年九月更新: 在原来的基础上,我使用了yolov5代替了opencv的目标检测算法辅助相机进行三维坐标的获取,并成功用获取的坐标实时控制机械臂,感兴趣的话可以看我b站里的视频,视频下方也有开源的链接:【软核】我给自己开发了一条机械臂...
    99+
    2023-08-31
    大数据 opencv 计算机视觉
  • Python VTK映射三维模型表面距离
    数据准备: 需要准备两个stl文件、Python需要安装vtk库 步骤一:数据读取 首先通过vtk.vtkSTLReader() 定义stl文件读取接口...
    99+
    2024-04-02
  • 三维目标检测之ROS可视化
    实验室有一个镭神C16的激光雷达,最近在我这,想拿来玩一玩。本意是做一个实时的检测,通过ROS获取激光雷达的激光点云,用pointpillars模型来进行实时的三维目标检测任务。但是镭神c16这一...
    99+
    2023-09-02
    目标检测 python 深度学习
  • 基于yolov5的目标检测和单目测距
    废话在前头   因为我的毕业设计就是搞目标检测这一块的,前段时间好不容易实现了yolov5的目标检测,后来还需要实现目标测距,于是在B站和博客里不断摸索,效果很不理想,知识点零散,幸运的是最终琢磨懂了...
    99+
    2023-09-20
    目标检测 深度学习 人工智能
  • python实现Nao机器人的单目测距
     本文实例为大家分享了python实现Nao机器人单目测距的具体代码,供大家参考,具体内容如下 此代码适于用做对Nao机器人做视觉识别和测距实验,只提供关键代码部分,尝试利...
    99+
    2024-04-02
  • 怎么用Python VTK映射三维模型表面距离
    这篇文章主要介绍了怎么用Python VTK映射三维模型表面距离的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python VTK映射三维模型表面距离文章都会有所收获,下面我们一起来看...
    99+
    2023-06-30
  • 基于python怎么实现单目三维重建
    一、单目三维重建概述尽管客观世界的物体是三维的,但我们获取的图像为二维,但是我们可以从这些二维图像中感知目标的三维信息。三维重建技术是以一定的方式处理图像进而得到计算机能够识别的三维信息,由此对目标进行分析。而单目三维重建则是根据单个摄像头...
    99+
    2023-05-20
    Python
  • OpenCV实现单目摄像头对图像目标测距
    使用opencv对单目摄像头中的目标实现测量距离(python实现),供大家参考,具体内容如下 1.方法介绍: 根据相似三角形的方法: F = P×D / W , 其中W...
    99+
    2024-04-02
  • C++如何利用opencv实现单目测距
    这篇文章将为大家详细讲解有关C++如何利用opencv实现单目测距,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。闲来无事,用C++做了一个简易的单目测距。算法用的cv自带的,改改参数就行。实现了读取照片测...
    99+
    2023-06-25
  • Python三维绘图--Matplotl
    Python三维绘图 在遇到三维数据时,三维图像能给我们对数据带来更加深入地理解。python的matplotlib库就包含了丰富的三维绘图工具。 1.创建三维坐标轴对象Axes3D 创建Axes3D主要有两种方式,一种是利用...
    99+
    2023-01-31
    Python Matplotl
  • python绘制三维图
    一、初始化 假设已经安装了matplotlib工具包。 利用matplotlib.figure.Figure创建一个图框: 1 2 3 4 import matplotlib.pyplot as plt from mpl_toolkit...
    99+
    2023-10-27
    python matplotlib 开发语言
  • python 之双色球预测
    #encoding=utf-8 #这是一个易经的启卦程序,在windows下的python3.3下创建' #启卦要本着易的四原则,无事不占,不动不占,无疑不占.不能乱占。 #预测原理是,随机生成一组6个红球号码,然后运行易经启卦程序,如果此...
    99+
    2023-01-31
    双色球预测 python
  • 如何基于python实现单目三维重建详解
    目录一、单目三维重建概述二、实现过程(1)相机的标定(2)图像特征提取及匹配(3)三维重建三、结论四、代码总结一、单目三维重建概述 客观世界的物体是三维的,而我们用摄像机获取的图像是...
    99+
    2024-04-02
  • python接口测试(三)
    引入unittest框架get请求#coding: utf-8 import unittest import requests import json class TestGet(unittest.TestCase):     def s...
    99+
    2023-01-31
    接口 测试 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作