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

使用Python通过变形网格生成畸变图像时输出不全,如何排查代码问题?

代码问题诊断及修复方案

你代码的问题主要出在以下几个地方:

  • 缩进错误:扰动计算的核心代码缩进层级错误,导致只有最后一次顶点扰动生效,其余所有循环内的扰动都被覆盖
# 原错误代码(缩进层级在for循环外)
msmv = mv * np.expand_dims(wt, axis=1)
perturbed_mesh = perturbed_mesh + msmv
# 修正:把这两行缩进一层,放到for k in range(nv)的循环内部
  • 映射源图像错误:你给原图加了padding得到带黑边的img,生成的扰动网格也是基于加padding后的尺寸nh、nw,但调用cv2.remap时传入的是原始无padding的src_img,尺寸不匹配导致映射区域越界
# 原错误代码
dst = cv2.remap(src_img, xs, ys, cv2.INTER_CUBIC)
# 修正:改用加了padding的img作为映射源
dst = cv2.remap(img, xs, ys, cv2.INTER_CUBIC)
  • 边界裁剪不完整:你只限制了扰动后的坐标不大于图像高宽,没有限制不小于0,负数坐标会被cv2.remap判定为无效区域,渲染为黑色
# 原错误代码
perturbed_mesh[:, 0] = np.where(perturbed_mesh[:, 0] > height, height, perturbed_mesh[:, 0])
perturbed_mesh[:, 1] = np.where(perturbed_mesh[:, 1] > width, width, perturbed_mesh[:, 1])
# 修正:补充下限判断,直接用clip更简洁
perturbed_mesh[:, 0] = np.clip(perturbed_mesh[:, 0], 0, height-1)
perturbed_mesh[:, 1] = np.clip(perturbed_mesh[:, 1], 0, width-1)
  • 顶点索引取值错误:create_grid函数中随机选顶点的索引取错了,np.shape(ms)[0]才是顶点总数,原代码取了np.shape(ms)[1]会导致索引越界
# 原错误代码
vidx = np.random.randint(np.shape(ms)[1])
# 修正
vidx = np.random.randint(np.shape(ms)[0])
  • 扰动次数可能为负:nv = np.random.randint(20) - 1会出现nv=-1的情况,此时不会执行任何扰动操作,可修改为nv = np.random.randint(1,20)保证每次都有扰动效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 00:54:03