tensorflow 读取图片进行边缘检测 并reshape后显示

import tensorflow as tf
import os
import matplotlib.pyplot as plt

filename='/home/ubuntu/images/1.jpeg'
img = tf.gfile.FastGFile(filename, 'r').read() #读取三通道图片
image_data = tf.image.decode_jpeg(img)#进行编码
image_show = tf.image.convert_image_dtype(image_data, dtype = tf.float32)#tensorflow中操作多为浮点型,而图片多为int型,故作此转化
image_batch = tf.expand_dims(image_show, 0)#原来的单张图片为三维(height,width,channel)而下文中卷积核定义为四维(batchsize,height,width,channel),因此通过该方法在0维添加一维,相当于将原来的单张图片三维数据放在一个另一个集合中从而形成四维

#边缘检测滤波器

kernel=tf.constant([
[
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]]
],
[
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
[[8.,0.,0.],[0.,8.,0.],[0.,0.,8.]],
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]]
],
[
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]]
]
])
with tf.Session() as sess:
    sess.run(image_show)
    plt.imshow(image_show.eval())
    plt.show()#读入tensorflow后画出原图
    conv2d=tf.nn.conv2d(image_batch,kernel,[1,1,1,1],padding='SAME')
    activation_map=sess.run(tf.minimum(tf.nn.relu(conv2d),255))#激活措施加均值操作将颜色值置于(0~255)以内的区间
    print activation_map.shape
    encoded_image=activation_map.reshape([720,1280,3])#注意该步骤将得到的四维np.array数据还原为三维。plt显示的前提   

    #encoded_image = tf.image.encode_jpeg(activation_map)
    #with tf.gfile.GFile('/home/ubuntu/images/output.jpg', 'wb') as f:
        #plt(encoded_image.eval())
        #plt.show()
        #f.write(encoded_image.eval())

    active= tf.image.convert_image_dtype(encoded_image, dtype = tf.float32)
    plt.imshow(active.eval())
    plt.show()

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是用Python实现边缘检测并将边缘检测后的点拟合成曲线的示例代码: ```python import cv2 import numpy as np import matplotlib.pyplot as plt # 读取图片 img = cv2.imread("image.jpg") # 转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 边缘检测 edges = cv2.Canny(gray, 100, 200) # 寻找轮廓 contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) # 将轮廓点拟合成曲线 for i in range(len(contours)): # 过滤掉长度小于10的轮廓 if len(contours[i]) < 10: continue # 将轮廓点转换为numpy数组 pts = np.array(contours[i], np.int32) pts = pts.reshape((-1, 1, 2)) # 拟合曲线 approx = cv2.approxPolyDP(pts, 0.01 * cv2.arcLength(pts, True), True) # 绘制曲线 cv2.polylines(img, [approx], True, (0, 0, 255), 2) # 显示结果 plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show() ``` 在这个示例代码中,我们首先读取一张图片,并将其转换为灰度图。然后,我们用Canny算法进行边缘检测。接下来,我们使用findContours函数寻找图像中的轮廓。最后,对于每一个轮廓,我们将其点拟合成曲线,并在原图上绘制出来。最终,我们使用matplotlib库来显示结果。 需要注意的是,这里我们只对长度大于等于10的轮廓进行拟合,因为长度小于10的轮廓基本上就只是噪点了。另外,这里使用的拟合算法是cv2.approxPolyDP函数,它可以将一组点拟合成指定精度的多边形。如果你想使用其他拟合算法,可以参考OpenCV的官方文档。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值