关于图像处理的模块常用的有 PIL,openCV等,不过应为要处理 tif 格式的图片,故特来写下这篇博客。

关于安装模块 libtiff

直接pip install libtiff 安装模块,发现无法导入,显示“No module named libtiff” ,打开anaconda prompt 执行conda list显示模块确实已经安装。尝试了把libtiff移除再重装还是没解决。

一、图片 读、写、显示、属性查看

libtiff 包装器

from libtiff import TIFF

tif = TIFF.open('filename.tif', mode='r') #打开tiff文件进行读取

image = tif.read_image() #读取图像并作为numpy数组返回

for image in tif.iter_images() #读取TIFF文件中的所有图像

tif = TIFF.open('filename.tif', mode='w') #打开tiff文件进行写入

tif.write_image(image) #将图像写入tiff文件

Python 模块

from libtiff import TIFFfile, TIFFimage

tif = TIFFfile('filename.tif') #读取图片

samples, sample_names = tiff.get_samples()

tiff = TIFFimage(data, description='')

tiff.write_file('filename.tif', compression='none') # or 'lzw'

del tiff # 刷新(释放缓存)

opencv 模块

import cv2

cv2.imread("filename",flags)

=====================其中: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位

对于多通道TIFF图像,若要保证图像数据的正常读取,显然要选择IMREAD_UNCHANGED

PIL 模块

from PIL import Image

img0 = Image.open("D:/python_script/ffff/11lalala.jpg")

img1 = Image.open("D:/python_script/ffff/42608122.tif")

img2 = Image.open("D:/python_script/ffff/42608122_1.jpg") #这张图片是直接修改上张图的后缀名

print ("图片格式:{0},图片大小:{1},图片模式:{2}".format(img0.format,img0.size,img0.mode))

print ("图片格式:{0},图片大小:{1},图片模式:{2}".format(img1.format,img1.size,img1.mode))

print ("图片格式:{0},图片大小:{1},图片模式:{2}".format(img2.format,img2.size,img2.mode))

输出:#说明直接修改图片后缀名,图片的编码格式并没有改变

图片格式:JPEG,图片大小:(245, 213),图片模式:RGB

图片格式:TIFF,图片大小:(2480, 3508),图片模式:YCbCr

图片格式:TIFF,图片大小:(2480, 3508),图片模式:YCbCr

直接修改图片格式

import PIL.Image

import os

def convert(input_dir,output_dir):

for filename in os.listdir(input_dir):

path = input_dir+"/"+filename

print("doing... ",path)

PIL.Image.open(path).save(output_dir+"/"+filename[:-4]+".jpg")

print ("%s has been changed!"%filename)

if __name__ == '__main__':

input_dir = "D:/classifier_data20181225/img1"

output_dir = "D:/classifier_data20181225/img2"

convert(input_dir,output_dir)

大(分辨率大)图片缩小

遇到分辨率大,图片文件大小并不大的文件,opencv打不开,此时用到了以下代码用来缩小图片。

若文件宽大于1200,(高度小于1800)以此宽度等比缩放

若文件高大于1800,(宽度小于1200)以此高度等比缩放

import os

from PIL import Image

import shutil

def get_img(input_dir):

img_path_list = []

for (root_path,dirname,filenames) in os.walk(input_dir):

for filename in filenames:

img_path = root_path+"/"+filename

img_path_list.append(img_path)

print("img_path_list",img_path_list)

return img_path_list

def process_image(filename,output_dir, mwidth=1200, mheight=1800):

image = Image.open(filename)

w, h = image.size

if w <= mwidth and h <= mheight:

print(filename, 'is OK.')

shutil.move(filename, output_dir+filename[-15:])

return

if (1.0 * w / mwidth) > (1.0 * h / mheight):

scale = 1.0 * w / mwidth

new_im = image.resize((int(w / scale), int(h / scale)), Image.ANTIALIAS)

else:

scale = 1.0 * h / mheight

new_im = image.resize((int(w / scale), int(h / scale)), Image.ANTIALIAS)

new_im.save(output_dir+filename[-15:])

new_im.close()

if __name__ == '__main__':

input_dir = "D:/classifier_data20181212/lipei_resize_1"

output_dir = "D:/classifier_data20181212/lipei_resize/"

img_path_list = get_img(input_dir)

for filename in img_path_list:

print("filename",filename)

process_image(filename,output_dir)

python读取图片文件显示_Python—图像基本操作以及图像格式转换相关推荐

  1. python读取mdb文件显示_Python学习笔记(读mdb文件)

    1. 读取一个文件夹里所有文件名字 ① os.listdir(path) 仅当前路径下的文件名,不包括子目录中的文件 import os s_path = r'C:\Users\Desktop\标准文 ...

  2. python读取图片的格式_python读取图片并修改格式与大小的方法

    本文实例为大家分享了python读取图片并修改文件大小的具体代码,供大家参考,具体内容如下 # Author:NDK # -*- coding:utf-8 -*- from PIL import Im ...

  3. python读取xml文件信息_python读取xml文件方法解析

    关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码.这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python来读取xml文件. 什么是xm ...

  4. python读取hdf文件 高效_Python解析HDF文件

    前段时间因为一个业务的需求需要解析一个HDF格式的文件.在这之前也不知道到底什么是HDF文件.百度百科的解释如下: HDF是用于存储和分发科学数据的一种自我描述.多对象文件格式.HDF是由美国国家超级 ...

  5. python 读取图片为数字矩阵_python读取图像矩阵文件并转换为向量实例

    假设图像矩阵大小为32×32,将其转换为向量,首先创建1×1024的NumPy数组,然后打开给定的文件,循环读出文件的前32行,并将每行的头32个字符值存储在NumPy数组中 import numpy ...

  6. python读取xml文件内容_python读取xml文件

    关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码.这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python来读取xml文件. 什么是xm ...

  7. python读取docx文件出错_Python:读取 .doc、.docx 两种 Word 文件简述及“Word 未能引发事件”错误...

    Python 中可以读取 word 文件的库有 python-docx 和 pywin32. 优点 缺点 python-docx 跨平台 只能处理 .docx 格式,不能处理.doc格式 pywin3 ...

  8. python读取图片并且显示

    使用python-opencv读取图片,利用opencv或matplotlib显示图片. # -*- coding: utf-8 -*-import numpy as np from matplotl ...

  9. python读取大文件内容_Python模块linecache处理大文件

    linecache模块简介 Python处理大文件需要用到Linecache模块. linecache模块的作用是将文件内容读取到内存中,进行缓存,而不是每次都要从硬盘中读取,这样效率提高很多,又省去 ...

最新文章

  1. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动加和(rolling sum)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额加和
  2. 安装Linux后修改grub默认启动选项
  3. 用java做出32选7_用java做的一个彩票32选7的简单程序
  4. python超神之路:python异常对照表
  5. 从CUDA开始读OpenCL
  6. android studio提示要重写的方法,Android Studio 重写方法时参数命名异常
  7. Bootstrap3 Font Awesome 字体图标的堆叠
  8. Spark源码走读1——RDD
  9. webpack搭建服务器,随时修改刷新
  10. CCF201912-1 报数(100分)【模拟】
  11. Django项目实践4 - Django站点管理(后台管理员)
  12. 【BZOJ1226】学校食堂(动态规划,状态压缩)
  13. 图片URL转换为base64的两种方式
  14. vim 插件配置与安装
  15. 索引知识系列一:聚集索引与非聚集索引详解
  16. win10显示隐藏文件_Win10如何隐藏文件 电脑隐藏文件操作方法
  17. 计算机键盘有哪些作用,电脑上的键盘有哪些功能 你不知道的10大键盘功能介绍...
  18. 打印机连接计算机用什么端口,如何设置打印机端口,打印机端口设置的方法步骤...
  19. uni-app 二维码生成器分享
  20. 向Oracle表中的添加数据

热门文章

  1. 大学职业生涯规划书_计算机专业,4000字,合肥大学
  2. 使用腾讯企业邮箱调用SpringMail或者JavaMail发送邮件的发送服务器设置
  3. SQL Server找不到一个或多个组件
  4. js获取当前时间字符串 格式yyyy-MM-dd HH:MM:SS
  5. 台积电欲在2018年进军7nm工艺 挑战英特尔
  6. 联发科青黄不接陷增长瓶颈:或再错失物联网
  7. 【SequoiaDB|巨杉数据库】巨杉数据库数据内容管理服务技术特性4
  8. vignette滤镜效果
  9. 扩频码估计matlab,基于MATLAB扩频码设计仿真.ppt
  10. P2341 [HAOI2006]受欢迎的牛 (tarjan缩点+出度)