import os

  import sys

  import subprocess

  from pytesser_pro.pytesser_pro import *

  import Image, ImageEnhance, ImageFilter

  from pylab import *

  # 二值化并转格式

  def binary(image_name, binary_image_name):

  # 白底黑字

  args="convert -monochrome "+image_name+" "+binary_image_name

  # print args

  proc=subprocess.Popen(args, shell=True)

  proc.wait()

  im=Image.open(binary_image_name)

  w, h=im.size

  data=list(im.getdata())

  if (data[0], data[w-1], data[(h-1)*w], data[h*w-1])==(0, 0, 0, 0): # 0-黑色,255-白色

  # 若非白底黑字则灰度反转

  args1="convert -negate "+binary_image_name+" "+binary_image_name

  proc1=subprocess.Popen(args1, shell=True)

  proc1.wait()

  # 计算范围内点的个数

  def numpoint(im):

  w, h=im.size

  # print w, h

  data=list(im.getdata())

  mumpoint=0

  for x in range(w):

  for y in range(h):

  if data[y*w+x]==0: # 0-黑色,255-白色

  mumpoint +=1

  return mumpoint

  # 投影法去干扰线

  def pointmidu(binary_image_name, midu_image_name):

  im=Image.open(binary_image_name)

  w, h=im.size

  # print w, h

  len=5

  for x in range(0, w, len):

  box=(x, 0, x+len, h)

  im_box=im.crop(box)

  num=numpoint(im_box)

  # print num

  if num < 20:

  for i in range(x, x+len):

  for j in range(h):

  im.putpixel((i, j), 255) # 0-黑色,255-白色

  data=list(im.getdata())

  data_column=[]

  for x in range(w):

  temp=0

  for y in range(h):

  if data[y*w+x]==0: # 0-黑色,255-白色

  temp +=1

  data_column.append(temp)

  # print data_column

  start=0

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

  if data_column[i] !=0:

  break

  else:

  start +=1

  # print start

  end=w-1

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

  if data_column[j] !=0:

  break

  else:

  end +=-1

  # print end

  box_new=(start, 0, end+1, h)

  im_box_new=im.crop(box_new)

  im_box_new.save(midu_image_name)

  # 图像增强

  def filter_enhance(midu_image_name, midu_image_name_pro1):

  im=Image.open(midu_image_name)

  # 去噪

  im=im.filter(ImageFilter.MedianFilter())

  # 亮度加强

  enhancer=ImageEnhance.Contrast(im)

  im=enhancer.enhance(2)

  im=im.convert('1')

  # im()

  im.save(midu_image_name_pro1)

  # 字符分割

  def seg(midu_image_name_pro1, midu_image_name_pro2, num):

  im=Image.open(midu_image_name_pro1)

  w, h=im.size

  # print w, h, w/num

  len=2

  for i in range(num-1):

  start=(i+1)*w/num

  end=start+len

  for m in range(start, end+1):

  for n in range(h):

  im.putpixel((m, n), 255) # 0-黑色,255-白色

  im.save(midu_image_name_pro2)

  def get_aim1_point(im):

  aim=[]

  w, h=im.size

  # print w, h

  data=list(im.getdata())

  for x in range(0, w, 1):

  for y in range(0, h, 1):

  if data[y*w+x]==0: # 0-黑色,255-白色

  start_point=(x, y)

  # print start_point

  aim.append(start_point)

  break

  return aim

  def get_aim2_point(im):

  aim=[]

  w, h=im.size

  # print w, h

  data=list(im.getdata())

  for x in range(0, w, 1):

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

  if data[y*w+x]==0: # 0-黑色,255-白色

  start_point=(x, y)

  # print start_point

  aim.append(start_point)

  break

  return aim

  if __name__=='__main__':

  if len(sys.argv)==1:

  image_name="./pic/get_random.jpg" # QQ账号买号验证码图片名称

  digits=False

  # image_name="./pic/get_price_img.png" # 价格图片名称

  # digits=True

  elif len(sys.argv)==2:

  if sys.argv[1].find("get_random") !=-1:

  image_name=sys.argv[1]

  digits=False

  elif sys.argv[1].find("get_price_img") !=-1:

  image_name=sys.argv[1]

  digits=True

  else:

  print "Please Input the Correct Image Name!"

  sys.exit(0)

  else:

  print "Too Many Arguments!"

  sys.exit(0)

  # 二值化并转格式

  binary_image_name=os.path.splitext(image_name)[0]+"_binary.png"

  binary(image_name, binary_image_name)

  im=Image.open(binary_image_name)

  print im.format, im.size, im.mode

  if digits:

  text=image_file_to_string(binary_image_name, bool_digits=digits)

  print text.replace("

  ", "")

  else:

  # 投影法去干扰线

  fpathandname , fext=os.path.splitext(binary_image_name)

  midu_image_name=fpathandname+"_midu"+fext

  pointmidu(binary_image_name, midu_image_name)

  fpathandname , fext=os.path.splitext(midu_image_name)

  # 去干扰线

  # im=Image.open(midu_image_name)

  # w, h=im.size

  # data=list(im.getdata())

  # aim1=get_aim1_point(im)

  # for x, y in aim1:

  # curr=data[y*w+x]

  # prev=data[(y-1)*w+x]

  # next=data[(y+1)*w+x]

  #

  # if prev==0 and next==0: # 0-黑色,255-白色

  # continue

  # if prev==0:

  # im.putpixel((x, y), 255)

  # im.putpixel((x, y-1), 255)

  # elif next==0:

  # im.putpixel((x, y), 255)

  # im.putpixel((x, y+1), 255)

  # else:

  # im.putpixel((x, y), 255)

  # data=list(im.getdata())

  # aim2=get_aim2_point(im)

  # for x, y in aim2:

  # curr=data[y*w+x]

  # prev=data[(y-1)*w+x]

  # next=data[(y+1)*w+x]

  #

  # if prev==0 and next==0: # 0-黑色,255-白色

  # continue

  # if prev==0:

  # im.putpixel((x, y), 255)

  # im.putpixel((x, y-1), 255)

  # elif next==0:

  # im.putpixel((x, y), 255)

  # im.putpixel((x, y+1), 255)

  # else:

  # im.putpixel((x, y), 255)

  # midu_image_name_new=fpathandname+"_new"+fext

  # im.save(midu_image_name_new)

  # 图像增强

  midu_image_name_pro1=fpathandname+"_pro1"+fext

  filter_enhance(midu_image_name, midu_image_name_pro1)

  # 字符分割

  # num=4

  # midu_image_name_pro2=fpathandname+"_pro2"+fext

  # seg(midu_image_name_pro1, midu_image_name_pro2, num)

  # im=Image.open(midu_image_name)

  # text=image_to_string(im)

  # print text.replace("

  ", "")

  text=image_file_to_string(midu_image_name_pro1, bool_digits=digits)

  print text.replace("

  ", "")

更多相关文章

  1. Android(安卓)ListView 去除边缘阴影、选中色、拖动背景色、行高
  2. 如何去掉状态栏和内容视图之间的黑色阴影线
  3. android去除ImageButton白色边框
  4. Android(安卓)ListView 去除边缘阴影、选中色、拖动背景色、行高
  5. Android取消RecyclerView、ListView、ScrollView、HorizontalScr
  6. android 控件list选中后背景变成黑色
  7. Android(安卓)ListView 去除边缘阴影、选中色、拖动背景色等
  8. Android(安卓)对话框Activity去除白色边框背景
  9. android 调用人人网sdk登录页面 成功后不跳转 只停留在白色Oauth

随机推荐

  1. 如何兼容 MySQL + ES + MongoDB 实现上亿
  2. 谈谈PHP中的多进程消费队列
  3. 详解PHP论坛实现积分系统的思路代码
  4. php如何发布扩展信息
  5. PHP实现代码复用的traits新特性的方法
  6. PHP之钩子
  7. 学习php中利用explode函数分割字符串到数
  8. php之管理全局状态
  9. 学习PHP中使用Session配合Javascript实现
  10. 探索PHP 生命周期