我想使用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
返回的张量吗?
答案 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