Python 各种读取保存tif,tiff,png,jpg,mat等格式图像方法大集合

利用opencv读取tif 文件

#导入cv模块
import cv2 as cv
import numpy as np
#读取图像,支持 bmp、jpg、png、tiff 等常用格式
#第二个参数是通道数和位深的参数,有四种选择,参https://www.cnblogs.com/goushibao/p/6671079.html
img = cv.imread("filename.tif",2)
print img
#在这里一开始我写成了img.shape(),报错因为img是一个数组不是一个函数,只有函数才可以加()表示请求执行,
#参考http://blog.youkuaiyun.com/a19990412/article/details/78283742
print img.shape
print img.dtype
print img.min()
print img.max()
#创建窗口并显示图像
cv.namedWindow("Image")
cv.imshow("Image",img)
cv.waitKey(0)#释放窗口
cv.destroyAllWindows()

对于cv2,imread的关于通道数和位深的flags有四种选择:

IMREAD_UNCHANGED = -1#不进行转化,比如保存为了16位的图片,读取出来仍然为16位。
IMREAD_GRAYSCALE = 0#进行转化为灰度图,比如保存为了16位的图片,读取出来为8位,类型为CV_8UC1。
IMREAD_COLOR = 1#进行转化为RGB三通道图像,图像深度转为8位
IMREAD_ANYDEPTH = 2#保持图像深度不变,进行转化为灰度图。
IMREAD_ANYCOLOR = 4#若图像通道数小于等于3,则保持原通道数不变;若通道数大于3则只取取前三个通道。图像深度转为8位

PIL读取图像

from PIL import Image
im = Image.open("filename")

支持单通道及多通道Uint8 TIFF图像读取,读取单通道Uint16 TIFF图像转为Uint8处理,直接读取Uint16 TIFF图像会报错。

LIBTIFF包读取保存图像

from libtiff import TIFF
# to open a tiff file for reading:

tif = TIFF.open('filename.tif', mode='r')
# to read an image in the currect TIFF directory and return it as numpy array:

image = tif.read_image()
# to read all images in a TIFF file:

for image in tif.iter_images(): # do stuff with image
# to open a tiff file for writing:

tif = TIFF.open('filename.tif', mode='w')
# to write a image to tiff file

tif.write_image(image)

scikit包读取保存图像

1 from skimage import io
2 img = io.imread('testimg.tif')
3 import numpy as np
4 data=np.random.random([100,100])
5 io.imsave('rand_data.tif',np.float32(data))

imageio包读取保存图像

1 import imageio
2 im = imageio.imread('imageio:chelsea.png')  # read a standard image
3 im.shape  # im is a numpy array (300, 451, 3)
4 imageio.imwrite('~/chelsea-gray.jpg', im[:, :, 0])

misc包读取保存图像

from scipy import misc

# 读入已有图像,数据类型和原图像一致
tif32 = misc.imread('.\test\lena32.tif') #<class 'numpy.float32'="">
tif16 = misc.imread('.\test\lena16.tif') #<class 'numpy.uint16'="">
tif8 = misc.imread('.\test\lena8.tif') #<class 'numpy.uint8'="">

#保存图像
misc.imsave('.\test\lena32_scipy.tif', tif32) #--> 8bit(tif16和tif8同)
misc.imsave('.\test\\randmat64_scipy.tif', flt) #--> 8bit
misc.imsave('.\test\\randmat8_scipy.tif', z8) #--> 8bit(z16和z32同)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<think>好的,我现在需要回答用户关于如何在Matlab中使用imread函数读取图片并存储到数组的问题。首先,我得回顾一下用户提供的引用内容,看看里面有哪些有用的信息。 根据引用[1],imread函数是用来读取图像的,而且在Matlab和OpenCV中都有这个函数。用户提到的Matlab中的imread返回三维数组,这点很重要。引用[2]详细说明了Matlab中imread返回的是三维数组,原点在左上角,索引从1开始。引用[3]给出了一个读取索引图像的示例,使用了[X, cmap]的返回形式,这可能涉及到索引图像的情况。引用[4]虽然主要讲Python的OpenCV,但提到返回Mat类型,但用户关心的是Matlab,所以可能这部分参考价值不。 用户的问题是如何在Matlab中读取图片文件并存到数组里。首先,我需要明确步骤:使用imread函数,指定文件路径和文件名,然后存储返回的数组。需要注意不同图像类型(如RGB、灰度、索引图像)的处理方式不同。例如,RGB图像返回三维数组(行×列×3),而灰度图像是二维数组。索引图像可能需要同时获取图像数据和颜色映射表。 接下来,我需要考虑示例代码。比如,读取当前文件夹下的'image.jpg',存储到变量I中,并显示图像。对于索引图像,可能需要[X, cmap] = imread('corn.tif'); 这样的形式。同时,要提醒用户注意路径问题,可以使用绝对路径或相对路径,以及不同图像格式的支持情况。 可能还需要提到常见的错误,比如文件不存在时的情况,但用户的问题主要集中在读取和存储,所以可能不需要深入错误处理,但可以简要提及。此外,数据类型的问题,比如uint8和double的转换,可能在处理图像数据时需要注意,但根据引用内容,用户可能只需要基础的使用方法,所以暂时不深入。 最后,生成的相关问题需要基于imread函数的应用和注意事项,比如不同图像类型的处理、路径设置、显示图像等。这样用户如果有进一步的问题,可以自行查阅或提问。</think>### 如何在Matlab中读取图片文件并存储到数组? #### 1. **使用`imread`函数读取图像** 在Matlab中,`imread`函数用于将图像文件(如JPEG、PNG、BMP等)读取为数组。其基本语法为: ```matlab I = imread('filename.ext'); ``` - `filename.ext`为图像文件名(需包含扩展名),例如`'image.jpg'`。 - 返回值`I`为存储图像数据的数组。若图像为**RGB彩色图像**,返回三维数组(行×列×3);若为**灰度图像**,返回二维数组(行×列)[^2][^3]。 #### 2. **示例代码** **示例1:读取RGB图像并存储到数组** ```matlab % 读取当前文件夹下的RGB图像文件 I = imread('test_image.jpg'); % 显示数组信息 disp('数组维度:'); disp(size(I)); % 输出类似 [高度, 宽度, 3] % 显示图像 imshow(I); ``` **示例2:读取灰度图像或索引图像** ```matlab % 读取灰度图像(二维数组) gray_image = imread('gray_image.png'); % 读取索引图像(需同时获取颜色映射表) [X, cmap] = imread('indexed_image.tif'); ``` - **索引图像**:`X`为索引矩阵,`cmap`为颜色映射表,需通过`imshow(X, cmap)`正确显示[^3]。 #### 3. **注意事项** - **路径问题**:若图像不在当前工作目录,需提供完整路径,例如: ```matlab I = imread('C:\images\data\photo.jpg'); ``` - **支持格式**:Matlab支持常见格式如JPEG、PNGTIFF等,具体可通过`imformats`命令查看。 - **数据类型**:多数图像读取后为`uint8`类型(0-255范围),如需数值计算可转换为`double`: ```matlab I_double = im2double(I); ``` #### 4. **验证数据存储** 通过`size`函数检查数组维度,或直接显示部分像素值: ```matlab % 查看RGB图像左上角5×5区域的红色通道值 red_pixels = I(1:5, 1:5, 1); disp(red_pixels); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值