zoukankan      html  css  js  c++  java
  • 图片处理完整流程(包含二值化处理、对黑白照片降噪、边缘去黑像素、三通道转为一通道、图片转array、图片转成任意像素等功能)——可满足一般图片处理要求

    因为注释给的很详细,所以直接给代码:

     1 from PIL import Image
     2 import numpy as np
     3 # 二值化处理
     4 
     5 
     6 def 二值化处理(image):
     7     for i in range(1, 5):
     8         # 灰度图
     9         lim = image.convert('L')
    10         # 灰度阈值设为165,低于这个值的点全部填白色
    11         threshold = 165
    12         table = []
    13         for j in range(256):
    14             if j < threshold:
    15                 table.append(0)
    16             else:
    17                 table.append(1)
    18         bim = lim.point(table, '1')
    19     return bim
    20 def 对黑白图片进行降噪(im):
    21     # 图像二值化
    22     data = im.getdata()
    23     w, h = im.size
    24     black_point = 0
    25     for x in range(1, w - 1):
    26         for y in range(1, h - 1):
    27             mid_pixel = data[w * y + x]  # 中央像素点像素值
    28             if mid_pixel < 50:  # 找出上下左右四个方向像素点像素值
    29                 top_pixel = data[w * (y - 1) + x]
    30                 left_pixel = data[w * y + (x - 1)]
    31                 down_pixel = data[w * (y + 1) + x]
    32                 right_pixel = data[w * y + (x + 1)]
    33                 # 判断上下左右的黑色像素点总个数
    34                 if top_pixel < 10:
    35                     black_point += 1
    36                 if left_pixel < 10:
    37                     black_point += 1
    38                 if down_pixel < 10:
    39                     black_point += 1
    40                 if right_pixel < 10:
    41                     black_point += 1
    42                 if black_point < 1:
    43                     im.putpixel((x, y), 255)
    44                 # print(black_point)
    45                 black_point = 0
    46     return im
    47 
    48 def 边缘黑像素(im):
    49     # 去除干扰线
    50 
    51     # 图像二值化
    52     data = im.getdata()
    53     w, h = im.size
    54     black_point = 0
    55     for x in range(1, w - 1):
    56         for y in range(1, h - 1):
    57             if x < 2 or y < 2:
    58                 im.putpixel((x - 1, y - 1), 255)
    59             if x > w - 3 or y > h - 3:
    60                 im.putpixel((x + 1, y + 1), 255)
    61     return im
    62 def 处理照片(image):
    63     im_1=二值化处理(image)
    64     im_2=对黑白图片进行降噪(im_1)
    65     im_3=边缘黑像素(im_2)
    66     return im_3
    67 
    68 def 切图片(im):
    69     gray = im.convert('L')
    70     (x, y) = gray.size  # read image size
    71     x_s = 28  # define standard width
    72     y_s = 28  # calc height based on standard width
    73     out = gray.resize((x_s, y_s), Image.ANTIALIAS)  # resize image with high-quality
    74     return out
    75 def 转array(im):
    76     im2 = 1 - np.array(im) / 255
    77     print(im2)
    78     print(im2.shape)
    79     return im2
    80 def GET_true_img(url_name):
    81     image = Image.open('../data/test/'+url_name+'.png')
    82     im_1=处理照片(image)
    83     im_1.save("../data/test/去噪/"+url_name+"_out_处理.png")
    84     im_2=切图片(im_1)
    85     im_2.save("../data/test/去噪/"+url_name+"_out.png")
    86     im_narray=转array(im_2)
    87 
    88     return im_narray
    89 if __name__ =='__main__':
    90     image = Image.open('../data/test/8.png')
    91     im_1=处理照片(image)
    92     im_1.save("../data/test/去噪/8_out_处理.png")
    93     im_2=切图片(im_1)
    94     im_2.save("../data/test/去噪/8_out.png")
    95     im_narray=转array(im_2)

    处理前

     处理后:

    转型后:

  • 相关阅读:
    [转]C#里 泛型Where和 new()的使用
    测试
    C#中的static、readonly与const的比较
    将字符串格式化变为两位
    在VS中对字段进行包装
    安装mysql的心得
    关于mysql数据库的乱码问题
    timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP
    解决向数据库mysql插入double数据小数点不显示问题
    JDBOOK
  • 原文地址:https://www.cnblogs.com/smartisn/p/12629902.html
Copyright © 2011-2022 走看看