python matplotlib plot_surface 3D深度值

zbdgwd5y  于 2023-01-12  发布在  Python
关注(0)|答案(1)|浏览(152)

我使用下面的代码来获取所显示的2张图像的3D深度投影。我需要最大和最小深度值,以及这些最大和最小深度值的x和y坐标。是否有函数/方法可以从中获取这些信息?即使它将使用matplotlib以外的库。

import cv2
import numpy as np
import  math
import scipy.ndimage as ndimage

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

image2=cv2.imread('D:/Post_Grad/STDF/iPython_notebooks/2228.jpg')
image2 = image2[:,:,1] # get the first channel
rows, cols = image2.shape
x, y= np.meshgrid(range(cols), range(rows)[::-1])

blurred = ndimage.gaussian_filter(image2,(5, 5))
fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(221)
ax.imshow(image2, cmap='gray')
ax = fig.add_subplot(222, projection='3d')
ax.elev= 5
f1=ax.plot_surface(x,y,image2, cmap=cm.jet)
ax = fig.add_subplot(223)
ax.imshow(blurred, cmap='gray')
ax = fig.add_subplot(224, projection='3d')
ax.elev= 5
f2=ax.plot_surface(x,y,blurred, cmap=cm.jet)
plt.show()

zazmityj

zazmityj1#

最大深度和最小深度就是图像的最大和最小像素值。你可以通过np.max(image2),np.min(image2)等很容易地找到这些值。坐标也可以通过一个简单的函数找到

def getCoord(image,val):
    coords = []
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            if image[i][j] == val:
                coords.append([i,j])
    return coords

因此getCoord(image2,np.max(image2))将返回image2中的所有最高像素坐标(它可以大于1),getCoord(blurred,np.min(blurred))将返回blurred中的所有最低像素坐标,等等。

相关问题