tensorflow和cv2在形态学操作上的区别
程序员文章站
2022-06-16 10:02:08
tensorflow和cv2在形态学操作上的区别tf.nn.erosion2d、tf.nn.dilation2d和cv2.erode,cv2.dilate的区别:1.结果的区别:实验:原图片:(来自西工大NWPU-RESISC45数据集)用tf.nn.erosion2d的代码import tensorflow as tfimport skimage.io as ioimport keras.backend as Kimport numpy as npfrom matplotlib i...
tensorflow和cv2在形态学操作上的区别
tf.nn.erosion2d、tf.nn.dilation2d和cv2.erode,cv2.dilate的区别:
1.结果的区别:
实验:
原图片:(来自西工大NWPU-RESISC45数据集)
用tf.nn.erosion2d的代码
import tensorflow as tf
import skimage.io as io
import keras.backend as K
import numpy as np
from matplotlib import pyplot as plt
kernel = K.random_normal(shape = (3, 3, 1))
img = io.imread('./airplane.png')
img = tf.convert_to_tensor(img ,tf.float32) #将array转化为tensor
img = tf.expand_dims(img, 0) #升维度
img = tf.expand_dims(img, 3)
img1 = tf.nn.erosion2d(img, kernel, strides = [1,1,1,1], rates = [1,1,1,1], padding = "SAME")#图像腐蚀
with tf.Session() as sess:
imgout = sess.run(img1)
print(sess.run(img))
print('-----')
print(sess.run(img1))
imgout = imgout.squeeze(axis=0) #降维度
imgout = imgout.squeeze(axis=2)
plt.imshow(imgout)
plt.show()
plt.close()
结果(截取了一部分):
[[[[147.]
[153.]
[147.]
...
[147.]
[153.]
[147.]]
...
[ 51.]
[ 96.]
[ 51.]]]]
-----
[[[[145.54266 ]
[117.63092 ]
[115.54267 ]
...
[ 49.86652 ]
[ 49.99149 ]
[ 50.790764]]]]
输出图片:
用cv2.erode的代码:
from matplotlib import pyplot as plt
import skimage.io as io
import numpy as np
import cv2
img = io.imread('./airplane.png')
kernel = np.random.normal(loc = 0, scale = 1, size = (3, 3))
img1 = cv2.erode(img, kernel)
print(img)
print('-----')
print(img1)
plt.imshow(img1)
plt.show()
plt.close()
输出结果:
[[147 153 147 ... 147 153 147]
[147 153 117 ... 147 123 153]
[153 147 153 ... 153 147 137]
...
[147 123 147 ... 96 51 96]
[102 102 147 ... 80 51 96]
[102 147 102 ... 51 96 51]]
-----
[[147 117 117 ... 123 123 123]
[147 117 117 ... 123 123 123]
[147 117 117 ... 123 107 107]
...
[102 102 102 ... 51 51 51]
[102 102 102 ... 51 51 51]
[102 102 102 ... 51 51 51]]
输出图片:
图片看起来几乎一样,但是数据不是一样的。tf.nn.erosion2d只接受浮点数值的tensor,返回是浮点数据。而cv2.erode返回的是整数数据。在形态学膨胀上也如此。
2.参数区别:
tf.nn.erosion2d(
value,
kernel,
strides,
rates,
padding,
name=None
)
tf.nn.dilation2d(
input,
filter,
strides,
rates,
padding,
name=None
)
cv2.erode(src, kernel, dst=None, anchor=None,
iterations=None, borderType=None, borderValue=None)
cv2.dilate(src, kernel, dst=None, anchor=None,
iterations=None, borderType=None, borderValue=None)
本文地址:https://blog.csdn.net/gushiyi27/article/details/110493617
推荐阅读
-
在PHP上cookie和session的区别
-
tensorflow和cv2在形态学操作上的区别
-
mysql 请教where a.id=b.id 和join on a.id=b.id 在效率上的区别
-
nodejs学习笔记_nodejs和PHP在基础架构上的区别共享状态的并发
-
mysql 请教where a.id=b.id 和join on a.id=b.id 在效率上的区别
-
nodejs学习笔记_nodejs和PHP在基础架构上的区别共享状态的并发
-
手机html网页和电脑上的html网页在制作上有什么区别?
-
TensorFlow在Win10上的安装注意和步骤
-
在PHP上cookie和session的区别
-
PHP7和PHP5在安全上的区别(实例)