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中使用HTMLParser解析HTML的教程
Apr 29 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
python3 实现的人人影视网站自动签到
Jun 19 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
python适合人工智能的理由和优势
Jun 28 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
Python实现密钥密码(加解密)实例详解
Apr 26 Python
python判断正负数方式
Jun 03 Python
python 5个顶级异步框架推荐
Sep 09 Python
python实现不同数据库间数据同步功能
Feb 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
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
落伍首发 php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
PHP实现今天是星期几的几种写法
2013/09/26 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
ThinkPHP实现递归无级分类――代码少
2015/07/29 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
JavaScript 空位补零实现代码
2010/02/26 Javascript
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
详解A标签中href=""的几种用法
2017/08/20 Javascript
nodejs项目windows下开机自启动的方法
2017/11/22 NodeJs
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
Flask框架web开发之零基础入门
2018/12/10 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
python实现批量修改文件名
2020/03/23 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
慰问信模板
2015/02/14 职场文书
小学教师工作总结2015
2015/04/07 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
高一军训感想
2015/08/07 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书