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使用os模块的os.walk遍历文件夹示例
Jan 27 Python
20招让你的Python飞起来!
Sep 27 Python
基于python爬虫数据处理(详解)
Jun 10 Python
python基础教程项目二之画幅好画
Apr 02 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 Python
python高阶爬虫实战分析
Jul 29 Python
Python常用特殊方法实例总结
Mar 22 Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 Python
python代码实现图书管理系统
Nov 30 Python
pytest配置文件pytest.ini的详细使用
Apr 17 Python
Python办公自动化PPT批量转换操作
Sep 15 Python
python APScheduler执行定时任务介绍
Apr 19 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实现文件下载更能介绍
2012/11/23 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
jquery获取节点名称
2015/04/26 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
跟老齐学Python之??碌某?? target=
2014/09/12 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
python画双y轴图像的示例代码
2019/07/07 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
年度献血先进个人事迹材料
2014/02/14 职场文书
人事部专员岗位职责
2014/03/04 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
教师节获奖感言
2015/07/31 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书