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程序中操作MySQL的基本方法
Jul 29 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
python3.X 抓取火车票信息【修正版】
Jun 19 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
python 如何停止一个死循环的线程
Nov 24 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 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/06/23 PHP
PHP实现简单登录界面
2019/10/23 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
NodeJS 实现多语言的示例代码
2018/09/11 NodeJs
JSON.stringify()方法讲解
2019/01/31 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
python内存管理分析
2015/04/08 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Python实现简单字典树的方法
2016/04/29 Python
Python内置函数delattr的具体用法
2017/11/23 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
校企合作协议书
2014/04/16 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技