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发送SMTP邮件的教程
Apr 29 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
PyQt5实现简易计算器
May 30 Python
Pyinstaller打包.py生成.exe的方法和报错总结
Apr 02 Python
Python jieba库用法及实例解析
Nov 04 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
解决python运行效率不高的问题
Jul 20 Python
python使用多线程查询数据库的实现示例
Aug 17 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
python爬取某网站原图作为壁纸
Jun 02 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框架Symfony2经典入门教程
2014/07/08 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
js数组的操作指南
2014/12/28 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
Django 开发环境配置过程详解
2019/07/18 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
表扬信格式
2014/01/12 职场文书
致200米运动员广播稿
2014/02/06 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
公司开除员工通知
2015/04/22 职场文书
Django migrate报错的解决方案
2021/05/20 Python