You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Numpy将两个点阵2D数组合并为3D点阵数组?

用Numpy高效实现数字图片的3D点阵组合

第一步:把单张数字图片转为布尔矩阵

先写一个工具函数,将单张图片转换成布尔矩阵(黑色像素标记为True),这种形式比直接存储坐标更适配后续Numpy操作:

import cv2
import numpy as np

def load_digit_mask(img_path):
    # 按需求读取并旋转图片
    image = cv2.rotate(cv2.imread(img_path), cv2.ROTATE_90_CLOCKWISE)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    threshold_level = 25
    # 直接生成布尔矩阵:低于阈值的黑色像素为True
    return gray < threshold_level

第二步:批量加载所有数字的布尔矩阵

把0-9(以及你需要的特殊字符如R)的图片批量加载,存入字典方便后续调用:

# 假设图片命名为0.jpg、1.jpg...9.jpg、R.jpg,根据实际路径修改
digit_masks = {}
# 加载0-9的数字掩码
for digit in range(10):
    digit_masks[str(digit)] = load_digit_mask(f"{digit}.jpg")
# 加载特殊字符R的掩码
digit_masks["R"] = load_digit_mask("R.jpg")

第三步:组合两个数字为3D点阵块

借助Numpy的向量化操作,无需手动遍历维度,直接生成3D坐标数组:

def combine_two_digits(mask_left, mask_right, z_left=0, z_right=1):
    # 获取左边数字的黑色像素坐标(y, x)
    y_left, x_left = np.where(mask_left)
    # 生成对应z轴值
    z_left_vals = np.full_like(y_left, z_left)
    # 组合成3D坐标(x, y, z),可根据需求调整坐标顺序
    coords_left = np.column_stack([x_left, y_left, z_left_vals])
    
    # 处理右边数字:x坐标偏移原图片宽度,实现并排效果
    y_right, x_right = np.where(mask_right)
    x_right_shifted = x_right + mask_left.shape[1]  # 偏移量为左边图片的列数(x轴范围)
    z_right_vals = np.full_like(y_right, z_right)
    coords_right = np.column_stack([x_right_shifted, y_right, z_right_vals])
    
    # 合并左右两边的3D坐标
    return np.vstack([coords_left, coords_right])

# 示例:组合数字8和字符R
combined_coords = combine_two_digits(digit_masks["8"], digit_masks["R"])

# 将结果保存到文件
np.savetxt("8R_3d_coords.txt", combined_coords, fmt="%d")

核心优势

  • 全程使用Numpy向量化操作,比手动遍历维度效率提升显著
  • 布尔矩阵的形式让后续调整(如修改阈值、反转黑白)更灵活
  • 坐标偏移、z轴赋值均为数组级操作,简洁且不易出错

内容的提问来源于stack exchange,提问作者psilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:06:01