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

如何在不同二值图像运行骨架提取代码及解决imresize废弃问题

2D AOF骨架算法代码问题解决方案

一、适配其他输入图像的处理步骤

  1. 统一输入预处理流程
    所有输入图像必须先转灰度图,再做二值化处理(骨架提取仅针对单通道二值图,前景目标为白色):
    import cv2
    import numpy as np
    
    # 读取图像
    img = cv2.imread("your_image_path.jpg")
    # 转灰度图
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 二值化(调整阈值确保目标为白色,背景为黑色)
    _, binary_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    
  2. 匹配原代码输入格式
    确保处理后的图像是2D数组(形状为(height, width)),若存在多余通道维度,用squeeze()去除:
    if len(binary_img.shape) > 2:
        binary_img = np.squeeze(binary_img)
    
  3. 按需调整缩放逻辑
    若原代码固定缩放至特定尺寸,可根据新图像的实际大小调整缩放比例,保持宽高比避免变形,比如:
    target_size = (256, 256)  # 原代码目标尺寸
    scale_h = target_size[0] / binary_img.shape[0]
    scale_w = target_size[1] / binary_img.shape[1]
    scale = min(scale_h, scale_w)
    resized_img = cv2.resize(binary_img, (int(binary_img.shape[1]*scale), int(binary_img.shape[0]*scale)))
    

二、替换scipy.misc.imresize后的形状异常修复

问题核心:scipy.misc.imresize的尺寸参数顺序是(height, width),而cv2.resize的dsize参数顺序是(width, height),参数顺序颠倒导致形状识别错误。

替换规则

将原代码中scipy.misc.imresize的调用,按以下方式替换:

  1. 原固定尺寸缩放代码:
    # 原代码
    resized = scipy.misc.imresize(img, (256, 256))
    
    替换为:
    # 替换后(注意dsize是(宽度, 高度))
    resized = cv2.resize(img, (256, 256), interpolation=cv2.INTER_LINEAR)
    
  2. 原按比例缩放代码:
    # 原代码
    scale = 0.5
    new_h = int(img.shape[0] * scale)
    new_w = int(img.shape[1] * scale)
    resized = scipy.misc.imresize(img, (new_h, new_w))
    
    替换为:
    # 替换后(调换new_w和new_h的顺序)
    resized = cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_LINEAR)
    

验证方法

替换后打印图像形状,确认输出为(height, width)的2D数组:

print(resized.shape)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:45:23