如何绘制由tf.image.sobel_edges

时间:2019-09-17 15:17:10

标签: tensorflow

我想使用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程序/图像识别/sobleEdge.py',wdir ='E:/ projects / Github程序/图像识别')   追溯(最近一次通话):

     

文件“”,第1行,在       runfile('E:/ projects / Github程序/图像识别/sobleEdge.py',wdir ='E:/ projects / Github程序/图像识别')

     

文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py”,行文件中的第827行       execfile(文件名,命名空间)

     

execfile中的文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py”,第110行       exec(compile(f.read(),文件名,'exec'),命名空间)

     

文件“ E:/ projects / Github程序/图像识别/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行,在内部       返回func(ax,* map(sanitize_sequence,args),** kwargs)

     

文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ matplotlib \ cbook \ deprecation.py”,包装中的第369行       返回func(* args,** kwargs)

     

文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ matplotlib \ cbook \ deprecation.py”,包装中的第369行       返回func(* args,** kwargs)

     

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

     

set_data中的文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ matplotlib \ image.py”,行683       .format(self._A.shape))

     

TypeError:图像数据的形状无效(1、5、565、750、3、2)

有人可以帮我绘制由tf.image.sobel_edges返回的张量吗?

1 个答案:

答案 0 :(得分:0)

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无法直接处理张量。 输出:click to see the output image here