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实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
Numpy中的mask的使用
Jul 21 Python
pytorch 数据集图片显示方法
Jul 26 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
python中sympy库求常微分方程的用法
Apr 28 Python
Python如何telnet到网络设备
Feb 18 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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
destoon整合UCenter图文教程
2014/06/21 PHP
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
使用console进行性能测试
2015/04/27 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
Angular开发实践之服务端渲染
2018/03/29 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
详解python with 上下文管理器
2020/09/02 Python
物流管理应届生求职信
2013/11/07 职场文书
安全生产投入制度
2014/01/29 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
留学推荐信怎么写
2015/03/26 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android