怎样使用Python图像处理

怎样使用Python图像处理,第1张

Python图像处理是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语法,高效率的高层数据结构,能够简单而有效地实现面向对象编程,下文进行对Python图像处理进行说明。

当然,首先要感谢“恋花蝶”,是他的文章“用Python图像处理 ” 帮我坚定了用Python和PIL解决问题的想法,对于PIL的一些介绍和基本 *** 作,可以看看这篇文章。我这里主要是介绍点我在使用过程中的经验。

PIL可以对图像的颜色进行转换,并支持诸如24位彩色、8位灰度图和二值图等模式,简单的转换可以通过Imageconvert(mode)函数完 成,其中mode表示输出的颜色模式。例如''L''表示灰度,''1''表示二值图模式等。

但是利用convert函数将灰度图转换为二值图时,是采用固定的阈 值127来实现的,即灰度高于127的像素值为1,而灰度低于127的像素值为0。为了能够通过自定义的阈值实现灰度图到二值图的转换,就要用到 Imagepoint函数。

深度剖析Python语法功能

深度说明Python应用程序特点

对Python数据库进行学习研究

Python开发人员对Python经验之谈

对Python动态类型语言解析

Imagepoint函数有多种形式,这里只讨论Imagepoint(table, mode),利用该函数可以通过查表的方式实现像素颜色的模式转换。其中table为颜色转换过程中的映射表,每个颜色通道应当有256个元素,而 mode表示所输出的颜色模式,同样的,''L''表示灰度,''1''表示二值图模式。

可见,转换过程的关键在于设计映射表,如果只是需要一个简单的箝位值,可以将table中高于或低于箝位值的元素分别设为1与0。当然,由于这里的table并没有什么特殊要求,所以可以通过对元素的特殊设定实现(0, 255)范围内,任意需要的一对一映射关系。

示例代码如下:

import Image # load a color image im = Imageopen(''funjpg'') # convert to grey level image Lim = imconvert(''L'') Limsave(''fun_Leveljpg'') # setup a converting table with constant threshold threshold = 80 table = [] for i in range(256): if i < threshold: tableappend(0) else: tableappend(1) # convert to binary image by the table bim = Limpoint(table, ''1'') bimsave(''fun_binaryjpg'')

IT部分通常要完成的任务相当繁重但支撑这些工作的资源却很少,这已经成为公开的秘密。任何承诺提高编码效率、降低软件总成本的IT解决方案都应该进行 周到的考虑。Python图像处理所具有的一个显著优势就是可以在企业的软件创建和维护阶段节约大量资金,而这两个阶段的软件成本占到了软件整个生命周期中总成本 的50%到95%。

Python清晰可读的语法使得软件代码具有异乎寻常的易读性,甚至对那些不是最初接触和开发原始项目的程序员都 能具有这样的强烈感觉。虽然某些程序员反对在Python代码中大量使用空格。

不过,几乎人人都承认Python图像处理的可读性远胜于C或者Java,后两 者都采用了专门的字符标记代码块结构、循环、函数以及其他编程结构的开始和结束。提倡Python的人还宣称,采用这些字符可能会产生显著的编程风格差 异,使得那些负责维护代码的人遭遇代码可读性方面的困难。转载

class Point:

  row=0

  col=0

  def __init__(self, row, col):

    selfrow=row

    selfcol=col

  def copy(self):

    return Point(row=selfrow, col=selfcol)

#初始框架

import pygame

import random

#初始化

pygameinit()

W=800

H=600

ROW=30

COL=40

size=(W,H)

window=pygamedisplayset_mode(size)

pygamedisplayset_caption('贪吃蛇')

bg_color=(255,255,255)

snake_color=(200,200,200)

head=Point(row=int(ROW/2), col=int(COL/2))

head_color=(0,128,128)

snakes=[

  Point(row=headrow, col=headcol+1),

  Point(row=headrow, col=headcol+2),

  Point(row=headrow, col=headcol+3)

]

#生成食物

def gen_food():

  while 1:

    pos=Point(row=randomrandint(0,ROW-1), col=randomrandint(0,COL-1))

    #

    is_coll=False

    #是否跟蛇碰上了

    if headrow==posrow and headcol==poscol:

      is_coll=True

    #蛇身子

    for snake in snakes:

      if snakerow==posrow and snakecol==poscol:

        is_coll=True

        break

    if not is_coll:

      break

  return pos

#定义坐标

food=gen_food()

food_color=(255,255,0)

direct='left'       #left,right,up,down

#

def rect(point, color):

  cell_width=W/COL

  cell_height=H/ROW

  left=pointcolcell_width

  top=pointrowcell_height

  pygamedrawrect(

    window, color,

    (left, top, cell_width, cell_height)

  )

  pass

#游戏循环

quit=True

clock=pygametimeClock()

while quit:

  #处理事件

  for event in pygameeventget():

    if eventtype==pygameQUIT:

      quit=False

    elif eventtype==pygameKEYDOWN:

      if eventkey==273 or eventkey==119:

        if direct=='left' or direct=='right':

          direct='up'

      elif eventkey==274 or eventkey==115:

        if direct == 'left' or direct == 'right':

          direct='down'

      elif eventkey==276 or eventkey==97:

        if direct == 'up' or direct == 'down':

          direct='left'

      elif eventkey==275 or eventkey==100:

        if direct == 'up' or direct == 'down':

          direct='right'

  #吃东西

  eat=(headrow==foodrow and headcol==foodcol)

  #重新产生食物

  if eat:

    food = gen_food()

  #处理身子

  #1把原来的头,插入到snakes的头上

  snakesinsert(0, headcopy())

  #2把snakes的最后一个删掉

  if not eat:

    snakespop()

  #移动

  if direct=='left':

    headcol-=1

  elif direct=='right':

    headcol+=1

  elif direct=='up':

    headrow-=1

  elif direct=='down':

    headrow+=1

  #检测

  dead=False

  #1撞墙

  if headcol<0 or headrow<0 or headcol>=COL or headrow>=ROW:

    dead=True

  #2撞自己

  for snake in snakes:

    if headcol==snakecol and headrow==snakerow:

      dead=True

      break

  if dead:

    print('死了')

    quit=False

  #渲染——画出来

  #背景

  pygamedrawrect(window, bg_color, (0,0,W,H))

  #蛇头

  for snake in snakes:

    rect(snake, snake_color)

  rect(head, head_color)

  rect(food, food_color)

  #

  pygamedisplayflip()

  #设置帧频(速度)

  clocktick(8)

#收尾工作

这是一个简易版贪吃蛇的代码,虽然结构简单,但是该有的功能都是完整的,可玩性也不错

使用Python获取电脑的磁盘信息需要借助于第三方的模块psutil,这个模块需要自己安装,纯粹的CPython下面不具备这个功能。

在iPython交互界面中进行如下演示:

查看电脑的磁盘分区:

In [1]: import psutil

In [2]: psutildisk_partitions()

Out[2]: [sdiskpart(device='/dev/disk2', mountpoint='/', fstype='hfs', opts='rw,local,rootfs,dovolfs,journaled,multilabel')]

In [3]: len(psutildisk_partitions())

Out[3]: 1

从上面的结果看出,电脑只有一个分区。针对最后的结果专门通过判断字典的元素个数来确认了一下。

查看电脑的磁盘使用百分比:

In [4]: psutildisk_usage('/')

Out[4]: sdiskusage(total=1114478608384, used=305497878528, free=808718585856, percent=274)

相对来说还好,新电脑使用时间还不是很长,硬盘暂时还没有塞满。总共用了大约274%。

查看电脑磁盘的IO计数:

In [5]: psutildisk_io_counters()

Out[5]: sdiskio(read_count=112237L, write_count=99750L, read_bytes=5243863040L, write_bytes=7047483392L, read_time=80568L, write_time=138699L)

In [7]: psutildisk_io_counters(perdisk=True)

Out[7]:

{'disk0': sdiskio(read_count=103533L, write_count=86260L, read_bytes=5120090624L, write_bytes=4813373440L, read_time=29774L, write_time=27654L),

'disk1': sdiskio(read_count=8740L, write_count=13723L, read_bytes=124141056L, write_bytes=2237206528L, read_time=50840L, write_time=111871L)}

上面分别使用了两种方式,第一种方式是获取磁盘总的IO信息,第二种是查看电脑分区的磁盘信息。从结果上来看,信息的统计不是按照逻辑分区来统计的,而是按照物理磁盘来统计的。我的电脑上正好是有两块磁盘,一块机械硬盘还有一块固态硬盘,其实这个按照物理磁盘进行统计的说法是根据这个推断出来的。

难度:★★☆☆☆

类型:几何

方法:拒绝采样

力扣链接请移步 本题传送门

更多力扣中等题的解决方案请移步 力扣中等题目录

给定圆的半径和圆心的 x、y 坐标,写一个在圆中产生均匀随机点的函数 randPoint 。

说明:

输入值和输出值都将是浮点数。

圆的半径和圆心的 x、y 坐标将作为参数传递给类的构造函数。

圆周上的点也认为是在圆中。

randPoint 返回一个包含随机点的x坐标和y坐标的大小为2的数组。

示例 1:

输入:

["Solution","randPoint","randPoint","randPoint"]

[[1,0,0],[],[],[]]

输出: [null,[-072939,-065505],[-078502,-028626],[-083119,-019803]]

示例 2:

输入:

["Solution","randPoint","randPoint","randPoint"]

[[10,5,-75],[],[],[]]

输出: [null,[1152438,-833273],[246992,-1621705],[1113430,-1242337]]

输入语法说明:

输入是两个列表:调用成员函数名和调用的参数。Solution 的构造函数有三个参数,圆的半径、圆心的 x 坐标、圆心的 y 坐标。randPoint 没有参数。输入参数是一个列表,即使参数为空,也会输入一个 [] 空列表。

我们在以圆心为中心,以二倍半径为边长的正方形内部进行随机选点,当点落在圆内或者圆上时,满足条件,返回该点。

我们可以把上面的直角坐标变换为极坐标,随机的选取角度和半径,生成的点一定在圆上或者圆内。这里需要注意,由于在平面维度是均匀采样的,生成随机半径时需要对结果开方。

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步 力扣中等题解析

以上就是关于怎样使用Python图像处理全部的内容,包括:怎样使用Python图像处理、python有趣的编程代码、如何用python实现获取计算机上的硬盘名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9503018.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存