#############################################################################################

############################图片预处理以及图片裁剪###########################################

#############################################################################################

######图片切割##########

import os

import os.path

from PIL import Image

from PIL import ImageFilter

from PIL import ImageEnhance

import time

#########################切割函数#########################################

#################我的是根据目标图片,80*20以及实验得出结论################

##########################################################################

def segment(im):

s=6   #首次第一个点的横坐标

w=16  #宽度

h=20  #第二个点的纵坐标

t=0   #第一个点的纵坐标

im_new=[]#在一张图片裁剪四个区域

#for i in range(4):

#       im1=im.crop((s+w*i,t,s+w*(i+1),h))  #crop函数得到局部区域

#       im_new.append(im1)

im1=im.crop((6,0,6+17,20))

im_new.append(im1)

im1=im.crop((23,0,23+16,20))

im_new.append(im1)

im1=im.crop((39,0,39+16,20))

im_new.append(im1)

im1=im.crop((55,0,55+18,20))

im_new.append(im1)

return im_new

#################图片增强######################################

#################图片二值化函数:符合阈值之上,设为1;否则设为0###

###############################################################

def binarizing(im,threshold):

pixdata=im.load()

w,h=im.size

for j in range(h):

for i in range(w):

if pixdata[i,j]<threshold:

pixdata[i,j]=0

else:

pixdata[i,j]=255

return im

################################图片去噪############################

##########对于像素值>245的邻域像素,判别为属于背景色################

##########,如果一个像素上下左右4各像素值有超过2个##################

##########像素属于背景色,那么该像素就是目标点,否则就是噪声##########

####################################################################

def denoising(im):

pixdata=im.load()

w,h=im.size

for j in range(1,h-1):

for i in range(1,w-1):

count=0

if pixdata[i,j-1]>245:

count=count+1

if pixdata[i,j+1]>245:

count=count+1

if pixdata[i+1,j]>245:

count=count+1

if pixdata[i-1,j]>245:

count=count+1

if count>2:

pixdata[i,j]=255

return im

###############################################################################

##############图片转换:打开图片,滤波器,增强,灰度图转换,去噪,二值化############

###############################################################################

def imgTransfer(f_name):

im=Image.open(f_name)  #打开图片

im=im.filter(ImageFilter.MedianFilter(1))  #对于输入图像的每个像素点,该滤波器从(size,size)的区域中拷贝中值对应的像素值存储到输出图像中

#enhancer=ImageEnhance.Contrast(im)

#im=enhancer.enhance(1)

im=ImageEnhance.Contrast(im).enhance(1.5)#enhance()的参数factor决定着图像的对比度情况。从0.1到0.5,再到0.8,2.0,图像的对比度依次增大.0.0为纯灰色图像;1.0为保持原始

im=im.convert('L')   #灰度图转换

im=denoising(im)     #图片去噪

im=binarizing(im,200)  #图片二值化

#im=nse.removeNoisy(im)

#im.save('/User/iswin/Downloads/vim/test.clear.jpg','jpeg')

#im.show()

return im

#####批量裁剪图片,并保存######################################

def cutPictures(img):

im=imgTransfer(img)#####图片预处理,二值化,图片增强

pics=segment(im) #######用crop函数裁剪

for pic in pics:

pic.save('G:\Test\%s.jpg'%(int(time.time()*1000000)),'jpeg')

rootdir=u'G:\Test'

for parent,dirnames,filenames in os.walk(rootdir):

for dirname in dirnames:

print "dirname is:"+dirname

print "parent is:"+parent

for filename in filenames:

print "filename is:"+filename

print "parent is:"+parent

print "the full name is:"+os.path.join(parent,filename)

cutPictures(os.path.join(parent,filename))

########实验效果如下:

python的N个小功能(图片预处理:打开图片,滤波器,增强,灰度图转换,去噪,二值化,切割,保存)的更多相关文章

  1. 机器学习进阶-项目实战-信用卡数字识别 1.cv2.findContour(找出轮廓) 2.cv2.boudingRect(轮廓外接矩阵位置) 3.cv2.threshold(图片二值化操作) 4.cv2.MORPH_TOPHAT(礼帽运算突出线条) 5.cv2.MORPH_CLOSE(闭运算图片内部膨胀) 6. cv2.resize(改变图像大小) 7.cv2.putText(在图片上放上文本)

    7. cv2.putText(img, text, loc, text_font, font_scale, color, linestick) # 参数说明:img表示输入图片,text表示需要填写的 ...

  2. python图片二值化提高识别率

    import cv2from PIL import Imagefrom pytesseract import pytesseractfrom PIL import ImageEnhanceimport ...

  3. 致敬学长!J20航模遥控器开源项目计划【开局篇】 | 先做一个开机界面 | MATLAB图像二值化 | Img2Lcd图片取模 | OLED显示图片

    我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...

  4. [置顶] c#验证码识别、图片二值化、分割、分类、识别

    c# 验证码的识别主要分为预处理.分割.识别三个步骤 首先我从网站上下载验证码 处理结果如下: 1.图片预处理,即二值化图片 *就是将图像上的像素点的灰度值设置为0或255. 原理如下: 代码如下: ...

  5. 深度学习实践-强化学习-bird游戏 1.np.stack(表示进行拼接操作) 2.cv2.resize(进行图像的压缩操作) 3.cv2.cvtColor(进行图片颜色的转换) 4.cv2.threshold(进行图片的二值化操作) 5.random.sample(样本的随机抽取)

    1. np.stack((x_t, x_t, x_t, x_t), axis=2)  将图片进行串接的操作,使得图片的维度为[80, 80, 4] 参数说明: (x_t, x_t, x_t, x_t) ...

  6. opencv python:图像二值化

    import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 二值图像就是将灰度图转化成黑白图,没有灰,在一个值之前为黑, ...

  7. python实现超大图像的二值化方法

    一,分块处理超大图像的二值化问题   (1) 全局阈值处理  (2) 局部阈值 二,空白区域过滤 三,先缩放进行二值化,然后还原大小 np.mean() 返回数组元素的平均值 np.std() 返回数 ...

  8. opencv2对于读书笔记——二值化——thresholded功能

    opencv二进制图象值功能threshold功能 其结构 double cv::threshold( //二值化函数 const CvArr* src, //原始图像 CvArr* dst, //输 ...

  9. opencv 删除二值化图像中面积较小的连通域

    对于上图的二值化图像,要去除左下角和右上角的噪点,方法:使用opencv去掉黑色面积较小的连通域. 代码 CvSeq* contour = NULL; double minarea = 100.0; ...

随机推荐

  1. html5新特性data_*自定义属性使用

    HTML5规范里增加了一个自定义data属性. 这个自定义data属性的用法非常的简单, 就是你可以往HTML标签上添加任意以 "data-"开头的属性, 这些属性页面上是不显示的 ...

  2. eclipse—Maven项目打包成exe

    1.下载打包工具j2ewiz  友情连接:https://pan.baidu.com/s/1Rcoqix5QcrJVI1of9h7qbQ提取码:vqn1 2.选中想要打包的文件,右击—Export 按 ...

  3. Oracle中解析XMLType格式字段

    背景:项目从某数据交换平台获取XML数据,以Oracle的XMLType格式保存在数据库字段中,需要建立触发器.存储过程,在保存数据时解析XML字段,将数据写入其他业务表中. 参考资料:Oracle的 ...

  4. Python 循环的技巧

    当在字典中循环时,用 items() 方法可将关键字和对应的值同时取出 >>> knights = {'gallahad': 'the pure', 'robin': 'the br ...

  5. 有关JOIN ON的心得体会

    在第一家公司工作大概有一年之后,我的上司开始让我负责一个项目了. 说起这个项目,其实就是类似一个报表系统的抽数据的活.我的主要工作就是将我们公司产生的数据进行抽取清理,然后生成一些带有分析性质的数据. ...

  6. ETSI公布的多接入移动边缘计算概念验证

    ETSI多接入移动边缘计算 公布的概念验证如下: 来源 MEC PoC Projects PoC#1: "Video User Experience Optimization via MEC ...

  7. CUDA、CUDNN在Mac Book Pro上安装的问题

    由于原版MacOS自带Nvidia驱动版本过低,导致最新版本CUDA安装后无法运行.具体症状为:在编译时一切正常,在运行CUDA相关程序时报错: CUDA driver version is insu ...

  8. Hyperledger Fabic中的Transaction流程

    Hyperledger Fabic中的Transaction流程 Transaction处理流程时从client发起proposal到背书节点,背书节点发返回背书结果.client再将proposal ...

  9. react-native ListView 性能问题

    常见性能问题已经有很多答案,这里要说的是使用ListView时注意的地方,    ListView的容器需要设定一个固定高度, 不然ListView中的item过多,会把整体页面撑开,设置的 remo ...

  10. [linux] tmux终端复用神器 [转载]

    转载https://www.cnblogs.com/kevingrace/p/6496899.html Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授 ...