使用PIL对图像进行灰度和二值化处理,并使用pyautogui在ps上自动绘制

首先用PIL库里的Image打开图像:

img = Image.open(r'C:\Users\xxxxx\Desktop\jks.jpg')

使用img.size发现这个图像为1920x1031个像素点,在ps上没法完全显示出来,因此我们需要对其进行压缩一下。

width,height = img.size
ya_suo_lv = 0.8
img = img.resize((int(width*ya_suo_lv),int(height*ya_suo_lv)),Image.ANTIALIAS)#压缩

通过PIL将其转化为灰度图:

def dodge(a, b, alpha):
    return min(int(a*255/(256-b*alpha)), 255)
 
blur=25
alpha=1.0
# 图片转换成灰色
img1 = img.convert('L')
img2 = img1.copy()
img2 = ImageOps.invert(img2)

# 模糊度
for i in range(blur):
    img2 = img2.filter(ImageFilter.BLUR)
width, height = img1.size
for x in range(width):
    for y in range(height):
        a = img1.getpixel((x, y))
        b = img2.getpixel((x, y))
        img1.putpixel((x, y), dodge(a, b, alpha))

img3 = Image.blend(img1,img1,1)#灰度处理后的图片

 将其二值化,转化为黑白简笔画,转化阈值取mean:

#二值化转成黑白图
img_arr = np.array(img1)
img2 = np.where(img_arr[...,:] < img_arr.mean(), 0, 255)

black = img2
img2 = Image.fromarray(img2)

然后我们通过pyautogui库去操纵鼠标移动和点击,思路为遍历存储图片信息的numpy矩阵,当矩阵值为0时跳过,为255时则操纵鼠标移动和点击:

point = black
x0=100
y0=50

for y in range(0,len(point)):
    for x in range(0,len(point[y])):
        if point[y][x1]!=255:
            pyautogui.moveTo(y+y0, x+x0)#光标移动到此处
            pyautogui.click()#点击一次左键

 最终绘画效果图如下所示:

完整代码:

from PIL import Image, ImageFilter, ImageOps
import numpy as np
import pyautogui

img = Image.open(r'C:\Users\xxxxxx\Desktop\jks.jpg')
width,height = img.size
ya_suo_lv = 0.8
img = img.resize((int(width*ya_suo_lv),int(height*ya_suo_lv)),Image.ANTIALIAS)#压缩
 
def dodge(a, b, alpha):
    return min(int(a*255/(256-b*alpha)), 255)
 
blur=25
alpha=1.0
# 图片转换成灰色
img1 = img.convert('L')
img2 = img1.copy()
img2 = ImageOps.invert(img2)

# 模糊度
for i in range(blur):
    img2 = img2.filter(ImageFilter.BLUR)
width, height = img1.size
for x in range(width):
    for y in range(height):
        a = img1.getpixel((x, y))
        b = img2.getpixel((x, y))
        img1.putpixel((x, y), dodge(a, b, alpha))

img3 = Image.blend(img1,img1,1)#灰度处理后的图片
#########img3.show(title = '压缩并灰度处理后的图片')
        
#二值化转成黑白图
img_arr = np.array(img1)
img2 = np.where(img_arr[...,:] < img_arr.mean(), 0, 255)

black = img2
img2 = Image.fromarray(img2)
#########img2.show(title = '灰度处理后再二值化处理的图片')#二值化处理后的图片

point = black
x0=100
y0=50

for y in range(0,len(point)):
    for x in range(0,len(point[y])):
        if point[y][x1]!=255:
            pyautogui.moveTo(y+y0, x+x0)#光标移动到此处
            pyautogui.click()#点击一次左键

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值