美文网首页我爱编程
openCV和Tensorflow起步

openCV和Tensorflow起步

作者: lhdoeo | 来源:发表于2018-05-13 21:20 被阅读0次

    1.配置开发环境Anaconda

    (1)打开Anaconda Prompt,将网址替换为清华镜像,这样下载各种依赖会快一些:

    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    conda config --set show_channel_urls yes
    

    (2)打开Anaconda Navigator,创建一个运行环境,名称为tensorflow36,并安装tensorflow和opencv

    2.Hello World

    (1)在Navigator中Home页面里运行notebook

    (2)图片的读取与展示

    cv2.imread()用于图片读取,它接受2个参数。参数1为文件名,参数2为图片读取类型,0为读取成灰度图,1为读取成彩色图
    cv2.imshow()用于显示图片,它接受2个参数。参数1为窗体名称,参数2为读取图片的原始数据
    cv2.waitKey(0)用于程序暂停,要显示图片必须运行这行代码

    import cv2
    img = cv2.imread('image0.jpg',1)
    cv2.imshow('image',img)
    cv2.waitKey(0)
    
    运行结果

    (3)图片的写入

    cv2.imwrite()该方法接受3个参数。参数1为文件名,参数2为图片原始数据,参数三为压缩质量,不同的图片格式拥有不同的数值范围,对于jpg来说可选质量0-100,对于png来说压缩范围为0-9

    import cv2
    img = cv2.imread('image0.jpg',1)
    #完成图片的写入功能
    cv2.imwrite('image1.jpg',img,[cv2.IMWRITE_JPEG_QUALITY,50])
    cv2.imwrite('image1.png',img,[cv2.IMWRITE_PNG_COMPRESSION,0])
    #jpg 0 压缩比高 png 0 压缩比低
    #jpg 压缩范围 0-100 png 压缩范围 0-9
    
    运行结果

    (4)像素操作基本概念

    • 颜色深度:按8bit举例,就是用8位存储一个颜色的值,8bit的每个颜色通道的取值范围是0-255
    • 图片大小:640x480即水平、竖直方向上有640、480个像素;640x480x3即图片占用的空间(8bit图片)
    • 图片格式:对于png图片来说,它采用的都是无损压缩方式,比jpg多出一个alpha颜色通道,用来存储透明度
    • 颜色通道:opencv读取的图片颜色通道是按bgr来排列的(b,g,r) = img[0,0]用元组来存储一个像素的颜色
    (b,g,r) = img[100,100] #img[]是一个矩阵结构,读取出的数据以元组储存,左上角为起点
    print(b,g,r) #openCV读取颜色为bgr
    for i in range(1,100):
        for j in range(1,100):
            img[100+i,100+j] = (255,0,0)
    cv2.imshow('image2',img)
    cv2.waitKey(0)
    
    运行结果

    (5)tensorflow基础知识

    • 使用图 (graph) 来表示计算任务
    • 在被称之为 会话 (Session) 的上下文 (context) 中执行图
    • 使用张量(tensor) 表示数据
    • 通过变量 (Variable) 维护状态
    • 使用 feed 和 fetch 可以为任意的操作赋值或者从其中获取数据
    1. 在Tensorflow计算图(graph)中,操作间传递的数据都是 tensor。 可以把 TensorFlow中tensor 看作是一个 n 维的数组或列表。 一个 tensor 包含一个静态类型 rank,和 一个 shape。
    2. 图中的节点被称之为 op (operation)。 一个 op 获得 0 个或多个 Tensor,执行计算, 产生 0 个或多个 Tensor。每个 Tensor 是一个类型化的多维数组。例如,你可以将一小组图像集表示为一个四维浮点数数组 [batch, height, width, channels]。
    3. 一个图描述了计算的过程。为了进行计算,图必须在会话里被启动。会话将图的 op 分发到诸如 CPU 或 GPU 之类的 设备 上,同时提供执行 op 的方法。这些方法执行后, 将产生的 tensor 返回。
    import tensorflow as tf
    data1 = tf.constant(2,dtype=tf.int32) #定义常量
    data2 = tf.Variable(10,name='var') #变量
    print(data1)#直接打印的为张量
    print(data2)
    sess = tf.Session() #tensorflow中所有的操作要通过会话变量来进行
    print(sess.run(data1))
    init = tf.global_variables_initializer() #如果在图中定义了变量一定要调用init为变量初始化
    sess.run(init)
    print(sess.run(data2))
    sess.close()
    #使用with方式可以不用关闭会话
    '''
    init = tf.global_variables_initializer()
    sess = tf.Session()
    with sess:
        sess.run(init)
        print(sess.run(data2))
    '''
    
    运行结果

    (6)Tensorflow四则运算

    tf.add()加法 tf.substract()减法 tf.multiply()乘法 tf.divide()除法

    import tensorflow as tf
    data1 = tf.constant(6)
    data2 = tf.Variable(2)
    dataAdd = tf.add(data1,data2)
    dataCopy = tf.assign(data2,dataAdd)#将结果拷贝到data2中
    dataMul = tf.multiply(data1,data2)
    dataSub = tf.subtract(data1,data2)
    dataDiv = tf.divide(data1,data2)
    init = tf.global_variables_initializer()
    with tf.Session() as sess:
        sess.run(init)
        print(sess.run(dataAdd))
        print(sess.run(dataMul))
        print(sess.run(dataSub))
        print(sess.run(dataDiv))
        print(sess.run(dataCopy))
        print(dataCopy.eval())
        print(tf.get_default_session().run(dataCopy))
    print('end')
    
    运行结果

    使用占位符方式

    import tensorflow as tf
    data1 = tf.placeholder(tf.float32)
    data2 = tf.placeholder(tf.float32)
    dataAdd = tf.add(data1,data2)
    with tf.Session() as sess:
        print(sess.run(dataAdd,feed_dict={data1:2,data2:6}))
    print('end')
    

    (7)tensorflow矩阵

    通过[ [data1,data2,... ] ]创建,最外层的[ ]只代表一个数组,里面的[ ]代表一行,内层的数据个数代表了几列,例如[[1,2],[3,4]]代表一个2*2的矩阵

    import tensorflow as tf
    data1 = tf.constant([[6,6]])#创建一个1x2的矩阵
    data2 = tf.constant([[2],[2]])#创建一个2x1的矩阵
    data3 = tf.constant([[1,2],[3,4],[5,6]])#3x2矩阵
    print(data3.shape)
    with tf.Session() as sess:
        print(sess.run(data3))
        print(sess.run(data3[0]))#打印第一行
        print(sess.run(data3[:,0]))#打印第一列
        print(sess.run(data3[0,1]))#第一行第二列
    
    运行结果
    到这就结束了什么都不会~~

    相关文章

      网友评论

        本文标题:openCV和Tensorflow起步

        本文链接:https://www.haomeiwen.com/subject/tztrdftx.html