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 相关文章推荐
Python3 伪装浏览器的方法示例
Nov 23 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
浅谈Python 递归算法指归
Aug 22 Python
python实现简单日志记录库glog的使用
Dec 13 Python
Python select及selectors模块概念用法详解
Jun 22 Python
经验丰富程序员才知道的8种高级Python技巧
Jul 27 Python
Pycharm中如何关掉python console
Oct 27 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 Python
基于Python实现射击小游戏的制作
Apr 06 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
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
php实现将Session写入数据库
2015/07/26 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
PHP 裁剪图片
2021/03/09 PHP
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
python进程管理工具supervisor使用实例
2014/09/17 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
Python实现的建造者模式示例
2018/08/06 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
Python中collections模块的基本使用教程
2018/12/07 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python 列表推导式使用详解
2019/08/29 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
Django自带的用户验证系统实现
2020/12/18 Python
毕业生自荐书
2014/02/02 职场文书
求职自荐信的格式
2014/04/07 职场文书
初中英语课后反思
2014/04/25 职场文书
保护环境的标语
2014/06/09 职场文书
小学见习报告
2015/06/23 职场文书
学校远程教育工作总结
2015/08/11 职场文书
放假通知怎么写
2015/08/18 职场文书
教师外出学习心得体会
2016/01/18 职场文书
课改心得体会范文
2016/01/25 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
创业计划书之餐饮
2019/09/02 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL