源分享网正式开通,我们为大家提供免费资源,欢迎大家踊跃投稿!

如何解决Python图像处理的问题

代码编程 青果笔记 11个月前 (06-10) 489次浏览 0个评论 扫描二维码

imtools.py里面也要有numpy 的引用才对

def histeq(im,nbr_bins=256):

“””对一幅灰度图像进行直方图均衡化”””

#计算图像的直方图

imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)

cdf = imhist.cumsum() #累计分布函数

cdf = 255 * cdf / cdf[-1] #归一化

#使用累计分布函数的线性插值,计算新的像素

im2 = interp(im.flatten(),bins[:-1],cdf)

return im2.reshape(im.shape),cdf

以上代码我定义在imtools.py文件里并且放在了python2.7里

然后我在num.py里引用他

Python code?

1

2

3

4

5

6

7

8

9

10

from PIL import Image

from pylab import *

from numpy import *

import imtools

im= array(Image.open(‘E:daimapydaimashijuetupian1gang2.jpg’).convert(‘L’))

im2,cdf =imtools.histeq(im)

出现以下错误:

Traceback (most recent call last):

File “<pyshell#56>”, line 1, in <module>

a=imtools.histeq(im)

File “E:daimapydaimashijueimtools.py”, line 32, in histeq

NameError: global name ‘histogram’ is not defined

1.图像裁剪、加边框、旋转(Python PIL)

如何解决Python图像处理的问题

我们可以用python实现很多功能,那么如何用python读取一个图像呢?下面我给大家分享一下。

工具/材料

CMD命令行

01

首先按下Win+R组合键打开运行界面,输入CMD,如下图所示

02

接下来在弹出的CMD界面中导入Python的图像处理模块PIL,如下图所示

03

接下来利用PIL模块的open方法读取图像,只要在括号里传入图像地址即可,如下图所示

04

最后执行程序我们就可以看到程序自动调用图像识别软件进行图像的读取了,如下图所示

如何解决Python图像处理的问题

日常工作中经常要用Photoshop打印一些地质图,虽然说PS有动作录制的功能,但是打印这个功能我尝试过录制动作后并未能成功运行,而且要打印的图像尺寸很多都是不同的,试了几次后就放弃了,直到后来Python学起来了,通过pywinauto库实现了这个功能,在这里就简单记录下吧。

在写Photoshop的打印操作之前,先来回顾下打印之前的图像处理工作。

接到的地质图多为MapGIS程序导出的jpg图片,偶尔也会有Tif格式的遥感图。对这些图像进行打印很简单,基本流程是:用PS打开图像->裁剪图像四周空白边缘->为图像四周加上3cm宽白色边框(为了美观和装订的需要)->打印。那为啥用PS来打印不直接用Windows自带打印呢,应该是打印需要用到PS特定的颜色处理模式吧,经过试验,通过两种方式打出来的色彩效果确实是不同的。

打印前图像处理的主要目标很简单:

1、裁剪图像四周空白

2、为图像四周加上3cm白色边框? ?

下面就用Python实现它们

图像处理主要用的是PIL这个库,中途由于单位电脑比较旧(4g内存Win7 32位系统,后来重装成64位了,体验就是搞这种东西必须整个64位系统),性能不太行了,也用Opencv整了下,还是感觉PIL稍微快那么一点点,不知道是不是错觉呢。

(后来发现这两步在PS录个动作也能轻松完成(??))

一、获取所有图片路径

有时候要打印的图片会放在好多个不同文件夹里面,要把它们遍历出来:

import os

二、读取图片并裁剪四周空白

import PIL

获得了图像尺寸后接下来就要对图像进行边缘空白的裁剪了(其实这两步不分先后顺序的):

裁剪的思路是网上搜到的,整理下就是:

1、先把图像转成灰度模式(值变成单一的0-255以方便判断,如果要裁剪其他颜色我就不知道了,我这里只要裁掉最常见的由MapGIS导出的标准的白色边缘)。

2、分别从四个方向扫描图像,找到四个方向各自第一个灰度值不为255(最纯粹的白色(??))的像素,记下它的坐标(i,j)。

3、通过四组坐标大小比较,得到图像除了四周空白区域外的坐标极值,也就得到了裁剪的区域左上(left,top)和右下坐标(right,bottom)。

4、利用PIL.Image.crop(),完成图像的裁剪。

5、没了,就是后来发现PIL自带这个算法,引用一下: 使用PIL裁剪图片白边

要是用PS来做呢,‘图像-裁切-确定’就完事了。

三、给裁剪后的图像加上x厘米的白色边框

这一步主要是为了打印出来的图规范且美观。

这一步要是用PS来搞,‘图像-画布大小-设置相对的宽度和高度’ 就好了

四、判断图像是否需要旋转。

为什么要旋转这些图像呢?因为最终是要把它们用打印机打印出来,而打印机能打印的最大宽度是有限的,所以就有了这个步骤。

单位的打印机型号是惠普的HP DesignJet Z6200 60 英寸照片打印机,最大打印纸张宽度是60英寸,大约就是1524mm左右吧,除了最大尺寸外,日常还用到的纸张宽度有440、610、914、1067、1274等6、7种吧,所以出于节约打印时间和省钱的考虑,为每张图选择最合适的打印纸张宽度也是很有必要的。

判断图像是否需要旋转的思路是这样的:

1、比较图像的宽和高,判断谁是图像的长边和短边。

2、短边如果大于1524mm,这图按1:1就打不出来了,超过打印机最大可装入的纸张的宽度,把这个图像文件放到Oversize_path路径下,后续自己看着办。

3、在短边小于等于1524mm的前提下,根据对图像宽高和长短边的比较,有两种需要旋转的情况:

3.1 如果图像的宽是长边(矮胖的矩形),且宽大于1524mm,那么这图得旋转90°;

3.2 如果图像的高是长边(瘦高的矩形),且高小于1524mm,那么这图也得旋转90°。

*printTOtkinter()是个用tkinter搞的进度显示窗口,就输出下一些文本信息而已。

五、为图像选择最合适的打印纸张尺寸

单位打印纸有438、610、914、1524等7种宽度,现在要选出最适合的一种来进行打印。

在把短边大于1524这种情况排除之后,剩下的图像情况为短边小于1524,即单位的打印机能打印出来了。

这时要判断最佳打印用纸的宽度,有两种情况需要考虑:

1、长边>1524,改用短边来比较选择打印纸宽度。

2、长边 ≤ 1524,用长边来比较选择打印纸宽度。

下面思路就是把要用作比较的边长放入纸张宽度列表,把列表排序后找到比这个边长大一点的那个纸张宽度。

主要的步骤就是这些,再经过一顿复制粘贴完善一下其他细节之后,最后会得到一个存放打印信息的列表,把它用txt存起来,这样后面的PS批量打印需要的信息就全部搞到手了。最后放个gif。


本站资源均来源于互联网,仅限于学习研究,严禁从事商业或者非法活动!丨本网站采用BY-NC-SA协议进行授权 转载请注明原文链接:如何解决Python图像处理的问题
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
热血江湖私发网 魔兽sf 热血江湖私服 热血江湖私服 热血江湖私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 热血江湖私服 热血江湖私服 热血江湖私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 热血江湖私服 热血江湖私服 热血江湖私服 热血江湖sf 热血江湖私发网 热血江湖私发网 热血江湖私发网 热血江湖私发网