zoukankan      html  css  js  c++  java
  • python-PIL模块的使用

    PIL基本功能介绍

    from PIL import Image
    from PIL import ImageEnhance
    
    img = Image.open(r'E:imgf1.png')
    img.show()
    #图像二值化
    img = img.convert('L')
    # 图像放大
    img = img.resize((img.width * int(3), img.height * int(4)), Image.ANTIALIAS)
    # # 对比度增强
    enh_con = ImageEnhance.Contrast(img)
    contrast = 2
    img_contrasted = enh_con.enhance(contrast)
    # 亮度增强
    enh_bri = ImageEnhance.Brightness(img_contrasted)
    brightness = 2.5
    image_brightened = enh_bri.enhance(brightness)
    #色度增强
    enh_col = ImageEnhance.Color(img)
    color = 50
    image_colored = enh_col.enhance(color)
    # # 锐度增强
    enh_sha = ImageEnhance.Sharpness(img)
    sharpness = 2
    image_sharped = enh_sha.enhance(sharpness)
    image_sharped.save(r'E:imgf22.png', dpi=(300, 300), quality=95)
    # image_sharped.save(r'E:imgf22.png')
    
    # 图片汉字识别
    img2 = Image.open(r'E:imgf22.png')
    code2 = pytesseract.image_to_string(img2, lang='chi_sim')
    # print(code2)
    # 图片裁剪
    image_cro = Image.open(r'E:imgf24.png')
    image_cropped = image_cro.crop(res)
    image_cropped.save(u'E:img\f25.png')  

    对图片进行黑白化处理

    img_main = Image.open(u'E:/login1.png')
    img_main = img_main.convert('L')
    threshold1 = 138
    table1 = []
    for i in range(256):
        if i < threshold1:
            table1.append(0)
        else:
            table1.append(1)
    img_main = img_main.point(table1, "1")
    img_main.save(u'E:/login3.png')
    

      

    计算小图在大图的坐标

    def get_screenxy_from_bmp(main_bmp, son_bmp):
        # 获取屏幕上匹配指定截图的坐标->(x,y,width,height)
    
        img_main = Image.open(main_bmp)
        img_main = img_main.convert('L')
        threshold1 = 138
        table1 = []
        for i in range(256):
            if i < threshold1:
                table1.append(0)
            else:
                table1.append(1)
        img_main = img_main.point(table1, "1")
    
        img_son = Image.open(son_bmp)
        img_son = img_son.convert('L')
        threshold2 = 138
        table2 = []
        for i in range(256):
            if i < threshold2:
                table2.append(0)
            else:
                table2.append(1)
        img_son = img_son.point(table2, "1")
    
        datas_a = list(img_main.getdata())
        datas_b = list(img_son.getdata())
        for i, item in enumerate(datas_a):
            if datas_b[0] == item and datas_a[i + 1] == datas_b[1]:
                yx = divmod(i, img_main.size[0])
                main_start_pos = yx[1] + yx[0] * img_main.size[0]
    
                match_test = True
                for n in range(img_son.size[1]):
                    main_pos = main_start_pos + n * img_main.size[0]
                    son_pos = n * img_son.size[0]
    
                    if datas_b[son_pos:son_pos + img_son.size[0]] != datas_a[main_pos:main_pos + img_son.size[0]]:
                        match_test = False
                        break
                if match_test:
                    return (yx[1], yx[0], img_son.size[0], img_son.size[1])
        return False
    

      

    ImageGrab实现屏幕截图

    im = ImageGrab.grab()
    im.save('D:/as1.png')
    
    #     # # # 参数说明
    #     # # # 第一个参数 开始截图的x坐标
    #     # # # 第二个参数 开始截图的y坐标
    #     # # # 第三个参数 结束截图的x坐标
    #     # # # 第四个参数 结束截图的y坐标
    bbox = (897, 131, 930, 148)
    im = ImageGrab.grab(bbox)
    im.save('D:/as2.png')
    

      

      

  • 相关阅读:
    Sendkeys 和 Sendmessage 使用技巧一例
    和菜鸟一起学算法之二分法求极值问题
    和菜鸟一起学算法之三分法求极值问题
    和菜鸟一起学证券投资之国内生产总值GDP
    和菜鸟一起学OK6410之Led字符驱动
    和菜鸟一起学OK6410之最简单驱动模块hello world
    和菜鸟一起学OK6410之交叉编译hello world
    和菜鸟一起学android4.0.3源码之touchscreen配置+调试记录
    和菜鸟一起学android4.0.3源码之红外遥控器适配
    和菜鸟一起学OK6410之最简单字符驱动
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/11027013.html
Copyright © 2011-2022 走看看