如何在不同二值图像运行骨架提取代码及解决imresize废弃问题
2D AOF骨架算法代码问题解决方案
一、适配其他输入图像的处理步骤
- 统一输入预处理流程
所有输入图像必须先转灰度图,再做二值化处理(骨架提取仅针对单通道二值图,前景目标为白色):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) - 匹配原代码输入格式
确保处理后的图像是2D数组(形状为(height, width)),若存在多余通道维度,用squeeze()去除:if len(binary_img.shape) > 2: binary_img = np.squeeze(binary_img) - 按需调整缩放逻辑
若原代码固定缩放至特定尺寸,可根据新图像的实际大小调整缩放比例,保持宽高比避免变形,比如: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的调用,按以下方式替换:
- 原固定尺寸缩放代码:
替换为:# 原代码 resized = scipy.misc.imresize(img, (256, 256))# 替换后(注意dsize是(宽度, 高度)) resized = cv2.resize(img, (256, 256), interpolation=cv2.INTER_LINEAR) - 原按比例缩放代码:
替换为:# 原代码 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
相关产品推荐
相关产品推荐

