各种图片格式

    主要介绍python和tensorflow中各种格式的图片处理

    一、图片的读入

    PIL.Image读入图片(RGB格式)

from PIL import Image
def PIL_open():
    image=Image.open('lena.png')
    image.show()

    cv2读入图片 (GBR格式)

import cv2
def cv2_open():
    image=cv2.imread('lena.png')
    cv2.imshow('lena',image)
    cv2.waitKey()

    PIL.Image和cv2之间的格式转换:

def cv2_to_PIL(): 
    image=cv2.imread('lena.png')
    image=Image.fromarray(cv2.cvtColor(image,cv2.COLOR_BGR2RGB)) 
    image.show() 

def PIL_to_cv2(): 
    image=Image.open('lena.png') 
    image=cv2.cvtColor(np.asarray(image),cv2.COLOR_RGB2BGR) 
    cv2.imshow('lena',image) 
    cv2.waitKey()

    二、图片的存储

#cv2:
cv2.imwrite('img.jpg', img) #img是np.ndarray
#PIL:
img = Image.fromarray(np_array)
img.save('img.jpg')

    三 、图片与np.ndarray之间的转换

image = Image.open('a.jpg')
array = np.array(image) #shape为(h, w, c), dtype为np.uint8

    cv2.imread()得到的就是np.ndarray格式

    四、图片和原始字节之间的转换  

    np.ndarray转换为byterray:

barray = bytearray(img) #img是np.ndarray, barray是标准一维python bytearray,如b'\x87K\xcdz>\xc0~B\xc4\'

    bytearray转换为np.ndarray:

img = np.array(barray).reshape(32, 32, 3)

     np.ndarray转换为bytes:

bs = img.tobytes() #img是np.ndarray

    bytes貌似不能直接转为np.ndarray, np.array(bs)得到的是字符串格式。需要先将bytes转化为byterarray?

    bytearray和bytes的值是相同的,区别在于bytearray可变,bytes不可变。从bytes转为bytearray:

barr = batearray(bytes_object)

      四、tensorflow读取图片

    如果文件是jpg、png、bmp、gif等格式,其编码格式不是按照图片像素值直接编码的,必须调用tf.image.decode_jpeg(png、bmp、gif、image)来解码。如果直接tf.decode_raw无法得到正确的数据

img_raw = tf.gfile.FastGFile('lyf.jpg', 'rb').read()
img_jpg = tf.image.decode_jpeg(img_raw)
with tf.Session() as sess:
    img = sess.run(img_jpg)

    如果文件是pickle、tfrecord等格式,编码时是直接把像素值编码,读取时先解码,再根据原文件格式还原

path = 'cifar-10-batches-py/data.tfrecord'
reader = tf.TFRecordReader()
fname_queue = tf.train.input_producer([path])
_, example = reader.read(fname_queue)
features = tf.parse_single_example(example,
                                  features={'label': tf.FixedLenFeature([], tf.int64),
                                            'raw_img': tf.FixedLenFeature([], tf.string)})
img = tf.reshape(tf.decode_raw(features['raw_img'], tf.uint8), [32, 32, 3])
label = features['label']

with tf.Session() as sess:
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)
    try:
        while True:
            im, lab = sess.run([img, label])
            plt.imshow(im)
            plt.title(lab)
            break
    except tf.errors.OutOfRangeError:
            print('done')
    finally:
        coord.request_stop()
    coord.join(threads)

       

 

### 回答1: pb动态库是一种程序库,它是一组可执行代码和数据,用于支持软件应用程序的运行和功能实现。pb动态库的特点是可以在程序运行时动态加载和链接,从而可以实现插件化开发和功能扩展。 imgdll是一种用于图片格式转换的动态链接库。它可以提供各种图片格式之间的转换和处理功能,例如将JPEG格式转换为PNG格式,或者将BMP格式转换为GIF格式等。imgdll库通常会提供一系列的函数接口,供软件开发者调用,实现图片格式的转换和处理。 使用imgdll库进行图片格式转换的步骤通常如下: 1. 引入imgdll库的相关头文件和链接库。 2. 调用库提供的函数接口,传入需要转换的图片文件路径和目标格式参数。 3. 等待函数执行完成,并获取转换后的图片文件路径或内存数据。 4. 可选地,对转换后的图片进行进一步处理或保存。 虽然以上是一个简化的步骤示例,但实际开发中可能还涉及其他参数设置、错误处理等。通过使用pb动态库,我们可以方便地调用imgdll库中的功能,减少代码重复开发,提高开发效率。 ### 回答2: Pb动态库是一种用于Pb编程语言的库文件,它包含了许多可重用的函数和过程,可以帮助开发者简化程序的开发过程。通过引用Pb动态库,开发者可以在程序中使用这些函数和过程,提高开发效率和代码重用性。 imgdll是一个用于图片格式转换的动态链接库。它提供了各种图片格式之间的转换功能,能够帮助开发者在程序中实现图片格式之间的互相转换。例如,可以将一张PNG格式的图片转换为JPEG格式,或者将一张BMP格式的图片转换为GIF格式。这样的功能对于一些需要处理大量图片的应用程序非常有用,比如图片编辑软件、图片批量处理工具等。 使用imgdll进行图片格式转换通常的步骤包括以下几个: 1. 导入imgdll库:在Pb程序中引入imgdll库,以便能够使用其中的函数和过程。 2. 载入源图片:使用imgdll库中的函数将源图片载入到程序中。 3. 设定转换参数:根据需要,使用imgdll库中的函数设定转换的参数,比如目标图片格式、转换质量等。 4. 执行转换:使用imgdll库中的函数执行图片格式转换操作。 5. 保存转换结果:将转换后的图片保存到指定路径。 通过imgdll库提供的函数和过程,开发者可以方便地将不同格式的图片进行转换,满足各种需求。同时,由于imgdll是一个动态链接库,可以使得程序的大小更加精简,并且减少了代码重复的情况,提高了程序的可维护性和可扩展性。 ### 回答3: pb动态库,也称为动态链接库(Dynamic Link Library),是一种在Windows操作系统中常用的共享库文件形式,其中包含了许多可被应用程序调用的函数和资源。 imgdll是一个用于图片格式转换的动态库。图片格式有许多种,例如JPEG、PNG、BMP等,每种格式都有不同的特点和用途。有时候我们需要将图片从一种格式转换成另一种格式,这时候就可以利用imgdll来实现。 使用imgdll,我们可以通过调用其提供的函数来完成不同格式图片的转换。它提供了一系列的接口,包括图片格式的检测、加载、保存等操作。比如,我们可以调用其接口函数来判断一张图片的格式类型,然后再根据需要选择合适的格式进行转换。通过传入源图片和目标格式作为参数,imgdll可以将图片进行格式转换,并保存为目标格式的文件。 使用imgdll的好处在于,它能够让我们的应用程序在不同的图片格式之间进行灵活的转换,而不需要我们自己编写复杂的转换算法。同时,由于imgdll是一个动态库,它可以被多个应用程序共享使用,大大节省了系统资源的消耗。 总之,pb动态库是一种常用的共享库形式,而imgdll则是一个用于图片格式转换的动态库。通过调用imgdll提供的接口函数,我们可以方便地实现不同格式图片的转换,使应用程序具有更高的灵活性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值