python画一幅简单抽象画_Python实现PS图像抽象画风效果的方法

该文介绍了如何使用Python实现将图像转化为抽象画风的特效。通过图像分割(SLIC算法)和颜色映射,从渐变色图中随机采样颜色,将采样的颜色赋予分割后的图像区域,从而达到抽象画风的效果。文中提供了详细代码示例和原图、效果图对比。
摘要由CSDN通过智能技术生成

本文实例讲述了Python实现PS图像抽象画风效果的方法。分享给大家供大家参考,具体如下:

今天介绍一种基于图像分割和color map 随机采样生成一种抽象画风的图像特效,简单来说,就是先生成一张 color map 图,颜色是渐变的,然后针对要处理的图像,进行分割,这里用的是 SLIC 分割算法,然后从 color map 中随机采样,将采样得到的像素值赋予分割后的图像区域。

# -*- coding: utf-8 -*-

"""

Created on Sun Aug 20 08:31:04 2017

@author: shiyi

"""

import numpy as np

import matplotlib.pyplot as plt

from skimage import io

from skimage.segmentation import slic

import numpy.matlib

import random

file_name='D:/Visual Effects/PS Algorithm/9.jpg';

img=io.imread(file_name)

row, col, channel = img.shape

# define the colormap

color_map = img.copy()

rNW = 0.5

rNE = 1.0

rSW = 0.0

rSE = 0.5

gNW = 0.0

gNE = 0.5

gSW = 0.0

gSE = 1.0

bNW = 1.0

bNE = 0.0

bSW = 0.5

bSE = 0.0

xx = np.arange (col)

yy = np.arange (row)

x_mask = numpy.matlib.repmat (xx, row, 1)

y_mask = numpy.matlib.repmat (yy, col, 1)

y_mask = np.transpose(y_mask)

fx = x_mask * 1.0 / col

fy = y_mask * 1.0 / row

p = rNW + (rNE - rNW) * fx

q = rSW + (rSE - rSW) * fx

r = ( p + (q - p) * fy )

r[r<0] = 0

r[r>1] =1

p = gNW + (gNE - gNW) * fx

q = gSW + (gSE - gSW) * fx

g = ( p + (q - p) * fy )

g[g<0] = 0

g[g>1] =1

p = bNW + (bNE - bNW) * fx

q = bSW + (bSE - bSW) * fx

b = ( p + (q - p) * fy )

b[b<0] = 0.0

b[b>1] = 1.0

color_map[:, :, 0] = r * 255

color_map[:, :, 1] = g * 255

color_map[:, :, 2] = b * 255

# segment the image

N_block = 100

segments = slic(img, n_segments=N_block, compactness=10)

# plt.imshow(segments, plt.cm.gray)

seg_img = img.copy()

T_mask = img.copy()

for i in range(N_block):

mask = (segments == i)

T_mask[:, :, 0] = mask

T_mask[:, :, 1] = mask

T_mask[:, :, 2] = mask

x_ind = int(random.random() * (col-1))

y_ind = int(random.random() * (row-1))

color = color_map[y_ind, x_ind, :] T_img = seg_img * T_mask

T_img = color

seg_img = seg_img * (1-T_mask) + T_img * T_mask

plt.figure(2)

plt.imshow(seg_img)

plt.show()

原图:

效果图:

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值