Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python np.uint8()使法向量计算错误_Python_Graphics_Normals - Fatal编程技术网

Python np.uint8()使法向量计算错误

Python np.uint8()使法向量计算错误,python,graphics,normals,Python,Graphics,Normals,所以,我想通过对深度图像应用梯度来计算边缘的法向量。当我出于某种原因(第一次尝试)使用np.uint8()更改矩阵图像时,法线指向错误的方向,如下图所示。在法线函数中,我使用ndimage.sobel来计算梯度。 当我从生成的实矩阵(第二次尝试)更改输入图像时,法向量计算正确,如图所示。有人能解释为什么会这样吗? 原始数据具有dtype('float64'),其中max=1.13和min=-0.11。因此,转换为dtype('uint8')会大大降低精度。有关详细信息,请参阅。谢谢您的回答。

所以,我想通过对深度图像应用梯度来计算边缘的法向量。当我出于某种原因(第一次尝试)使用np.uint8()更改矩阵图像时,法线指向错误的方向,如下图所示。在法线函数中,我使用ndimage.sobel来计算梯度。

当我从生成的实矩阵(第二次尝试)更改输入图像时,法向量计算正确,如图所示。有人能解释为什么会这样吗?


原始数据具有
dtype('float64')
,其中
max=1.13
min=-0.11
。因此,转换为
dtype('uint8')
会大大降低精度。有关详细信息,请参阅。谢谢您的回答。
#1st try
sm_im = np.zeros((100,100))
sm_im[30:-30, 20:-20] = 1
sm_im = nd.rotate(sm_im, 25, mode='constant')
sm_im_copy = np.uint8(sm_im) #HERE IS THE np.uint8
sm_edge_im = cv2.Canny(sm_im_copy, 1, 5)
normals_pm, edge_pm = normals(sm_im_copy, sm_edge_im) #PAY ATTENTION HERE
cv2.imwrite(r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\simple_debug_edge.png', sm_edge_im)
save_arr = r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\sm_normal_debug.png'
depth = Image.open(r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\simple.png')
draw_normals(edge_pm, normals_pm, depth, save_arr)

#2nd try
sm_im = np.zeros((100,100))
sm_im[30:-30, 20:-20] = 1
sm_im = nd.rotate(sm_im, 25, mode='constant') #USING THE ORIGINAL MATRIX
sm_im_copy = np.uint8(sm_im)
sm_edge_im = cv2.Canny(sm_im_copy, 1, 5)
normals_pm, edge_pm = normals(sm_im, sm_edge_im) #PAY ATTENTION HERE
cv2.imwrite(r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\simple_debug_edge.png', sm_edge_im)
save_arr = r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\sm_normal_debug.png'
depth = Image.open(r'C:\Users\Adam Syammas Zaki P\Documents\Assignment\Grasp Planning\Simulation\Image\simple.png')
draw_normals(edge_pm, normals_pm, depth, save_arr)