如何获取matplotlib plot_surface的3D深度最值及对应坐标?
获取深度数据最值及对应坐标的解决方案
你可以直接用NumPy自带的函数来实现需求,不需要额外引入其他库——毕竟你的image2和blurred本身就是NumPy数组,NumPy提供了高效的最值计算和索引定位工具。
实现步骤及代码示例
直接在你的现有代码末尾添加以下逻辑即可:
1. 处理原始图像image2
# 计算深度最值 max_val_img = np.max(image2) min_val_img = np.min(image2) # 获取最值在数组中的原始索引(行,列) max_idx_img = np.unravel_index(np.argmax(image2), image2.shape) min_idx_img = np.unravel_index(np.argmin(image2), image2.shape) # 转换为3D投影中的x、y坐标(匹配你代码里的网格定义) max_x_img = max_idx_img[1] # x对应列索引 max_y_img = rows - 1 - max_idx_img[0] # y是原始行索引的逆序 min_x_img = min_idx_img[1] min_y_img = rows - 1 - min_idx_img[0] # 输出结果 print(f"原始图像深度最大值: {max_val_img}, 对应坐标(x,y): ({max_x_img}, {max_y_img})") print(f"原始图像深度最小值: {min_val_img}, 对应坐标(x,y): ({min_x_img}, {min_y_img})")
2. 处理模糊后图像blurred
# 计算深度最值 max_val_blur = np.max(blurred) min_val_blur = np.min(blurred) # 获取最值在数组中的原始索引(行,列) max_idx_blur = np.unravel_index(np.argmax(blurred), blurred.shape) min_idx_blur = np.unravel_index(np.argmin(blurred), blurred.shape) # 转换为3D投影中的x、y坐标 max_x_blur = max_idx_blur[1] max_y_blur = rows - 1 - max_idx_blur[0] min_x_blur = min_idx_blur[1] min_y_blur = rows - 1 - min_idx_blur[0] # 输出结果 print(f"模糊图像深度最大值: {max_val_blur}, 对应坐标(x,y): ({max_x_blur}, {max_y_blur})") print(f"模糊图像深度最小值: {min_val_blur}, 对应坐标(x,y): ({min_x_blur}, {min_y_blur})")
关键函数说明
np.max()/np.min():直接计算数组的最大值、最小值np.argmax()/np.argmin():返回最值在展平数组中的索引np.unravel_index():将展平索引转换为原始二维数组的(行,列)索引- 坐标转换:因为你代码里的
y网格是range(rows)[::-1](即行索引逆序),所以需要用rows - 1 - 原始行索引来匹配3D图中的y坐标
内容的提问来源于stack exchange,提问作者Mohamed Hedeya
相关产品推荐
相关产品推荐

