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实现把回车符\r\n转换成\n
Apr 23 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 Python
神经网络python源码分享
Dec 15 Python
python定时关机小脚本
Jun 20 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
Aug 09 Python
python实现知乎高颜值图片爬取
Aug 12 Python
python 实现dict转json并保存文件
Dec 05 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
Python中zipfile压缩包模块的使用
May 14 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 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
js获取提交的字符串的字节数
2009/02/09 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
Python中title()方法的使用简介
2015/05/20 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
Python-opencv 双线性插值实例
2020/01/17 Python
python实现人机五子棋
2020/03/25 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
工地门卫岗位职责
2013/12/30 职场文书
应届生简历中的自我评价
2014/01/13 职场文书
社区活动邀请函范文
2014/01/29 职场文书
优秀学生事迹材料
2014/02/08 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
资料员岗位职责
2015/02/10 职场文书
通知范文怎么写
2015/04/16 职场文书
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers