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 相关文章推荐
CentOS6.5设置Django开发环境
Oct 13 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Django 实现下载文件功能的示例
Mar 06 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
python 处理string到hex脚本的方法
Oct 26 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
Dec 14 Python
Python3离线安装Requests模块问题
Oct 13 Python
python 操作hive pyhs2方式
Dec 21 Python
Win 10下Anaconda虚拟环境的教程
May 18 Python
keras多显卡训练方式
Jun 10 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 Python
Python中的程序流程控制语句
Feb 24 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下MAIL的另一解决方案
2006/10/09 PHP
在PHP中使用灵巧的体系结构
2006/10/09 PHP
php获得当前的脚本网址
2007/12/10 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
Python深度优先算法生成迷宫
2018/01/22 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
python 如何停止一个死循环的线程
2020/11/24 Python
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
十佳班主任事迹材料
2014/01/18 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
电气自动化求职信
2014/06/24 职场文书
个人委托书
2014/07/31 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
铁人观后感
2015/06/16 职场文书
创业计划书之溜冰场
2019/10/25 职场文书