python读取图片任意范围区域


Posted in Python onJanuary 23, 2019

使用python进行图片处理,现在需要读出图片的任意一块区域,并将其转化为一维数组,方便后续卷积操作的使用。
下面使用两种方法进行处理:

convert 函数

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

def ImageToMatrix(filename):
 im = Image.open(filename)  # 读取图片
 im.show()      # 显示图片
 width,height = im.size
 print("width is :" + str(width))
 print("height is :" + str(height))
 im = im.convert("L")    # pic --> mat 转换,可以选择不同的模式,下面有函数源码具体说明
 data = im.getdata()
 data = np.matrix(data,dtype='float')/255.0
 new_data = np.reshape(data * 255.0,(height,width))
 new_im = Image.fromarray(new_data)
 # 显示从矩阵数据得到的图片
 new_im.show()
 return new_data

def MatrixToImage(data):
 data = data*255
 new_im = Image.fromarray(data.astype(np.uint8))
 return new_im

'''
 convert(self, mode=None, matrix=None, dither=None, palette=0, colors=256)
  |  Returns a converted copy of this image. For the "P" mode, this
  |  method translates pixels through the palette. If mode is
  |  omitted, a mode is chosen so that all information in the image
  |  and the palette can be represented without a palette.
  |  
  |  The current version supports all possible conversions between
  |  "L", "RGB" and "CMYK." The **matrix** argument only supports "L"
  |  and "RGB".
  |  
  |  When translating a color image to black and white (mode "L"),
  |  the library uses the ITU-R 601-2 luma transform::
  |  
  |   L = R * 299/1000 + G * 587/1000 + B * 114/1000
  |  
  |  The default method of converting a greyscale ("L") or "RGB"
  |  image into a bilevel (mode "1") image uses Floyd-Steinberg
  |  dither to approximate the original image luminosity levels. If
  |  dither is NONE, all non-zero values are set to 255 (white). To
  |  use other thresholds, use the :py:meth:`~PIL.Image.Image.point`
  |  method.
  |  
  |  :param mode: The requested mode. See: :ref:`concept-modes`.
  |  :param matrix: An optional conversion matrix. If given, this
  |   should be 4- or 12-tuple containing floating point values.
  |  :param dither: Dithering method, used when converting from
  |   mode "RGB" to "P" or from "RGB" or "L" to "1".
  |   Available methods are NONE or FLOYDSTEINBERG (default).
  |  :param palette: Palette to use when converting from mode "RGB"
  |   to "P". Available palettes are WEB or ADAPTIVE.
  |  :param colors: Number of colors to use for the ADAPTIVE palette.
  |   Defaults to 256.
  |  :rtype: :py:class:`~PIL.Image.Image`
  |  :returns: An :py:class:`~PIL.Image.Image` object.

'''

原图:

python读取图片任意范围区域

filepath = "./imgs/"

imgdata = ImageToMatrix("./imgs/0001.jpg")
print(type(imgdata))
print(imgdata.shape)

plt.imshow(imgdata) # 显示图片
plt.axis('off')  # 不显示坐标轴
plt.show()

运行结果:

python读取图片任意范围区域

mpimg 函数

import matplotlib.pyplot as plt  # plt 用于显示图片
import matplotlib.image as mpimg  # mpimg 用于读取图片
import numpy as np

def readPic(picname, filename):
 img = mpimg.imread(picname)
 # 此时 img 就已经是一个 np.array 了,可以对它进行任意处理
 weight,height,n = img.shape  #(512, 512, 3)
 print("the original pic: \n" + str(img))

 plt.imshow(img)     # 显示图片
 plt.axis('off')     # 不显示坐标轴
 plt.show()

 # 取reshape后的矩阵的第一维度数据,即所需要的数据列表
  img_reshape = img.reshape(1,weight*height*n)[0]
  print("the 1-d image data :\n "+str(img_reshape))

 # 截取(300,300)区域的一小块(12*12*3),将该区域的图像数据转换为一维数组
 img_cov = np.random.randint(1,2,(12,12,3))  # 这里使用np.ones()初始化数组,会出现数组元素为float类型,使用np.random.randint确保其为int型
 for j in range(12):
  for i in range(12):
   img_cov[i][j] = img[300+i][300+j]

 img_reshape = img_cov.reshape(1,12*12*3)[0]
 print((img_cov))
 print(img_reshape)

 # 打印该12*12*3区域的图像
 plt.imshow(img_cov) 
 plt.axis('off') 
 plt.show()

 # 写文件
 # open:以append方式打开文件,如果没找到对应的文件,则创建该名称的文件
 with open(filename, 'a') as f:
  f.write(str(img_reshape))
 return img_reshape

if __name__ == '__main__':
 picname = './imgs/0001.jpg'
 readPic(picname, "data.py")

读出的数据(12*12*3),每个像素点以R、G、B的顺序排列,以及该区域显示为图片的效果:

python读取图片任意范围区域

参考:python 读取并显示图片的两种方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈Python爬取网页的编码处理
Nov 04 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
Windows下将Python文件打包成.EXE可执行文件的方法
Aug 03 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
Python3.5文件修改操作实例分析
May 01 Python
Python绘制股票移动均线的实例
Aug 24 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
Python使用tkinter实现小时钟效果
Feb 22 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 Python
Python基于plotly模块实现的画图操作示例
Jan 23 #Python
python实现剪切功能
Jan 23 #Python
对python实现合并两个排序链表的方法详解
Jan 23 #Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 #Python
python实现石头剪刀布程序
Jan 20 #Python
python random从集合中随机选择元素的方法
Jan 23 #Python
python3+selenium实现qq邮箱登陆并发送邮件功能
Jan 23 #Python
You might like
php 定界符格式引起的错误
2011/05/24 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
JS 获取滚动条高度示例代码
2013/10/24 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
详解python中递归函数
2019/04/16 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
python 同时读取多个文件的例子
2019/07/16 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
Python实现画图软件功能方法详解
2020/07/28 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
开学典礼演讲稿
2014/05/23 职场文书
开学典礼策划方案
2014/05/28 职场文书
销售辞职信范文
2015/03/02 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
公司会议开幕词
2016/03/03 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python