图像数据处理

最近一直在协助做算法平台,需要写一些边缘性的代码。由此也越发觉得自己的代码真是不忍直视。SO一直在完善各方面知识,这周主要看了面向对象方面的知识,发现工作中用的最多的还是最基本的东西,也有可能是还没遇到比较合适的场景。下面是为了巩固面向对象知识,将之前学习中的图像数据预处理部分封装了一下。

#coding:utf-8
#! /usr/bin/env python
import cv2
import numpy as np
import tensorflow as tf
import os
class DataProcess(object):
    def __init__(self, batch_size, image_height, image_width, crop_height, crop_width, label_bytes, num_channels, label_dict):
        self.batch_size = batch_size
        self.image_height = image_height
        self.image_width = image_width
        self.crop_height = crop_height
        self.crop_width = crop_width
        self.label_bytes = label_bytes
        self.num_channels = num_channels
        self.label_dict = label_dict
    #把图片读成一个像素矩阵,存储在二进制文件中
    def read_image_to_file(self,path):      
        if not os.path.isdir(path) and not os.path.isfile(path):
            return False
        if os.path.isfile(path):
            file_path = os.path.split(path) #分割出目录与文件
            lists2 = file_path[1].split('.') #分割出文件与文件扩展名
            file_ext = lists2[-1] #取出后缀名(列表切片操作)
            img_ext = ['bmp','jpeg','gif','psd','png','jpg']
            if file_ext in img_ext:
                img_file = "%s" %(path)
                image = cv2.imread(img_file)
                #将图片从BGR转换为RGB
                image1 = image[: , : , : : -1]
                #对图片进行缩放
                image2 = cv2.resize(image1, (self.image_height, self.image_width))
                #将图片转换成一维
                image3 = image2.flatten() / 255 #除以255相当于对图片的像素值归一化
                #每个存放图片的文件夹为图片的标签,提取图片的标签
                lists1 = file_path[0].split('/')
                labels = np.array((self.label_dict[lists1[-1]]))
                #将图片表示和标签合并在一起
                images = np.append(labels, image3)
                with open(image_file, 'wb')as fp:
                     fp.write(images)
        elif os.path.isdir(path):
            for x in os.listdir(path):
                self.read_image_to_file(os.path.join(path,x))
        return [image_file] 
    def read_cifar_files(self, filename_queue, distort_images = True):
        image_vec_length = self.image_height * self.image_width * self.num_channels
        record_length = self.label_bytes +  image_vec_length
        #读这个图片文件的文件列表,扭曲图片等于TRUE
        reader = tf.FixedLengthRecordReader(record_bytes = record_length)#从文件输出固定长度的字段(每个图片的存储字节数是固定的),
        #读取固定长度字节数信息(针对bin文件使用FixedLengthRecordReader读取比较合适)
        key,record_string = reader.read(filename_queue)#
        record_bytes = tf.decode_raw(record_string,tf.uint8)#####字符串转为张量数据decode_raw  长度是record_length 3072 + 1
        
        #从张量中提取数据段,并用cast进行数据类型转换
        image_label = tf.cast(tf.slice(record_bytes,[0],[1]),tf.int32) # tf.slice 可以是list,array,tensor #先抽取图片标签
        #抽取图片的表示
        image_extracted = tf.reshape(tf.slice(record_bytes,[1],[image_vec_length]),[self.num_channels,self.image_height,self.image_width])#只能将图片先转化成这个形状不然会破坏图片原有的格式
        
        image_uint8image = tf.transpose(image_extracted,[1,2,0])#第一维转到第三维,第二维转成第一维,第三维转成第二维
        reshaped_image = tf.cast(image_uint8image,tf.float32)#改变数据类型
        final_image_1 = tf.image.resize_image_with_crop_or_pad(reshaped_image,self.crop_width,self.crop_height)
        #剪裁或填充处理,会根据原图像的尺寸和指定的目标图像的尺寸选择剪裁还是填充,如果原图像尺寸大于目标图像尺寸,则在中心位置剪裁,
        #反之则用黑色像素填充。
        if distort_images:
            final_image = tf.image.random_flip_left_right(final_image_1)#以一定概率从左到右翻转
            final_image = tf.image.random_brightness(final_image,max_delta=63) #在某范围随机调整图片亮度
            final_image = tf.image.random_contrast(final_image,lower=0.2,upper=1.8) #在某范围随机调整图片对比度 
            final_image = tf.image.per_image_standardization(final_image)  #此函数的运算过程是将整幅图片标准化(不是归一化),加速神经网络的训练。
        return final_image,image_label,final_image_1
    def input_pipeline(self,path):
        filename_queue = self.read_image_to_file(path)
        image,label,temp_value = self.read_cifar_files(filename_queue)
        min_after_dequeue = 1000 #出队后队列里至少剩下min_after_dequeue个数据
        capacity = min_after_dequeue + 3 * self.batch_size #队列的长度
        #随机生成batch 数据
        example_batch,label_batch = tf.train.shuffle_batch([image,label],self.batch_size,capacity,min_after_dequeue)
        return (example_batch,label_batch,temp_value)

下周准备学习一下Socket编程,以及多线程和多进程,以便在数据量大的时候提高处理速率。ヾ(◍°∇°◍)ノ゙!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • skimage的基本用法 直方图是在展平图像上计算的:对于彩色图像,应在每个通道上单独使用该功能,以获得每个颜色通...
    UlissesJr阅读 3,050评论 0 0
  • 20181204 qzd 1 TFRcord输入数据格式 2 图像数据处理 3 多线程输入数据处理框架 4 数据集...
    原来是酱紫呀阅读 181评论 0 1
  • 今天收获不小,有逸品,一个竹篮子,蜗牛又来了,我崽在家吃饭,蜗牛居然不进去……我崽也不开门,然后明明是朋友的两个人...
    皆为序幕阅读 642评论 0 0
  • 连着几天,晚上做完作业馨儿让爸爸签字,爸爸签字不检查,让在哪里签就在哪里签。馨儿高兴的不要不要的,爸爸没有妈妈那么...
    yanzuliu阅读 561评论 0 0
  • 在过去的这几天,我围绕着山手线的所有车站,盖了它们的车站图章。 车站图章的设计多种多样,有的是街道的观光名胜和象征...
    神居秒算LIN阅读 3,968评论 0 0