如何绘制tf.image.sobel_edges返回的图像张量



我想使用tf.image.sobel_edges在张量流中使用 sobel edge .

以下是代码

import tensorflow as tf
import skimage.io
import numpy as np
from tensorflow import keras
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
image = skimage.io.imread('table1.jpg')
image=np.array(image)
image = tf.cast(image, tf.float32)
image=tf.compat.v1.expand_dims(image, 0)
sobel= tf.image.sobel_edges(image)
sess = tf.Session()
SobelImage=sess.run(sobel)
plt.imshow(SobelImage)
sess.close() 

当我运行程序时,我得到

runfile('E:/projects/Github programs/image recognition/sobleEdge.py', wdir='E:/projects/Github programs/image recognition'( 回溯(最近一次调用(:

文件 ",第 1 行,在 runfile('E:/projects/Github programs/image recognition/sobleEdge.py', wdir='E:/projects/Github programs/image recognition'(

文件"C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py",第 827 行,在运行文件中 可执行文件(文件名,命名空间(

文件 "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py",第 110 行,在 execfile 中 exec(compile(f.read((, filename, 'exec'(, namespace(

文件 "E:/projects/Github programs/image recognition/sobleEdge.py",第 29 行,在 plt.imshow(SobelImage(

文件 "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\pyplot.py",第 2677 行,在 imshow 中 没有其他{}(,**kwargs(

文件 "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib__init__.py",第 1589 行,位于内部 return func(ax, *map(sanitize_sequence, args(, **kwargs(

文件 "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\cbook\deprecation.py",第 369 行,包装器 return func(*args, **kwargs(

文件 "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\cbook\deprecation.py",第 369 行,包装器 return func(*args, **kwargs(

文件 "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes_axes.py",第 5660 行,在 imshow 中 im.set_data(X(

文件 "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\image.py",第 683 行,set_data .format(self._A.shape((

类型错误: 图像数据的形状 (1, 565, 750, 3, 2( 无效

有人可以帮我如何绘制tf.image.sobel_edges返回的张量

sobel= tf.image.sobel_edges(image)
print(sobel.shape)
cv2.imshow("image", image)
sobel_x = np.asarray(sobel[0, :, :, :, 0])  #  Sobel_X
sobel_y = np.asarray(sobel[0, :, :, :, 1])  #  Sobel_Y
cv2.imshow("Sobel_x",sobel_x)
cv2.imshow("Sobel_y",sobel_y)
cv2.waitKey(0)

由于sobel_edge函数的输出是一个形状为 [batch_size, h, w, d, 2] 的 5D 张量,其中最后两个维度在 X 和 Y 方向上保持 Sobel 边缘响应。此外,要显示,您需要先将张量转换为 np 数组,因为 cv2 无法直接处理张量。 输出:单击此处查看输出图像

最新更新