源码技术
php
java
python
Linux
当前位置:
首页
>
python
>用Python偷学梵高:30行代码复现大师笔触
用Python偷学梵高:30行代码复现大师笔触
2026-10-11 08:35:45
用Python偷学梵高:30行代码复现大师笔触
梵高是后印象派代表画家,其绘画风格以强烈鲜艳的色彩、粗犷动感的笔触及深刻的情感表达为核心特征 。他的作品突破了传统写实,强调主观感受的再现,对后世表现主义影响深远 。
下面是梵高经典的代表作之一
《星空》
笔触与线条:动态、扭曲、富有节奏感
漩涡状与曲线笔触:夜空中的星云、星星和月亮均以旋转、流动的曲线描绘,形成强烈的动态感。X射线扫描显示,每平方厘米包含12–15道笔触,颜料层厚度达7毫米,使用猪鬃硬笔快速堆叠。两种线条交互:画面结合歪扭的长线(如柏树、山峦)与破碎的短线(如星点、云纹),营造出“眩目奇幻”的视觉效果。柏树如火焰:前景的柏树被夸张为黑色火舌状,直冲云端,既象征生命挣扎,也呼应日本浮世绘《神奈川冲浪里》中的波浪形态。
色彩运用:表现性、高对比、情感化
主色调为钴蓝与黄橙:夜空以深蓝为主,星星、月亮用明黄形成强烈补色对比,增强视觉张力。非写实色彩:色彩并非再现自然,而是表达内心情绪——蓝色象征忧郁,黄色代表希望或神性,整体色调“单纯完整却隐含焦灼”。
构图与空间:动静对比、高视点、变形夸张
动静对比:躁动的天空(漩涡、流动)与宁静的村庄(平直线条、方形灯光)形成戏剧性反差。高视点风景:借鉴老勃鲁盖尔及印象派手法,从高处俯瞰场景,但极度主观化。形象夸张变形:教堂尖塔被拉长至现实的3倍;月亮直径放大5倍;星星呈“光晕”或“火球”状,非真实天文现象。
精神内涵:主观情感投射、宇宙哲思
画面并非写生,而是梵高在精神崩溃后对宇宙的内心投射,体现“困惑、痛苦与矛盾的缠绕”。柏树连接大地与星空,象征生命与宇宙的联结;村庄虽静却“照不到光”,暗示其孤独与绝望。融合日本浮世绘构图、德拉克洛瓦的动感,以及个人对“神性”的理解(如引用雨果“上帝是月蚀中的灯塔”)。
有人说,我想用豆包实现一下,那就给豆包一张内容图,再给它一张梵高的星空,然后附上相应的指令“请帮我把第一张图片的风格迁移到第二张图片上”,然后就能得到以下的效果图:
看起来似乎不太行,是不是梵高绘画这么多的技巧,豆包AI学不会啊?Python能实现吗?事实告诉我们,Python中几十行代码轻松搞定!
我们给梵高的星空图片进行学习,然后给一张内容的图片,
其实就是让Python将绘画艺术风格进行迁移!运行Python代码后,我们就可以得到以下效果图:
部分代码如下:
# 加载图像
content = load_image("内容图.jpg", max_size=512)
style = load_image("艺术图.jpg", shape=content.shape[-2:])
# 初始化生成图像(使用内容图像作为起点)
generated = content.clone().requires_grad_(True)
# 初始化模型和优化器
model = VGG16().to(device)
optimizer = optim.LBFGS([generated])
# 获取特征
def get_features(image):
features = model(image)
return [feature.detach() for feature in features]
content_features = get_features(content)
style_features = get_features(style)
# 计算风格特征的Gram矩阵
style_grams = [gram_matrix(feat) for feat in style_features]
print("开始进行绘画风格转化...")
step = [0]
while step[0] <= num3:
def closure():
# 梯度清零
optimizer.zero_grad()
# 获取生成图像的特征
generated_features = model(generated)
# 计算内容损失(conv4_3)
content_loss = torch.mean(
(generated_features[3] - content_features[3]) ** 2)
# 计算风格损失
style_loss = 0
for gen_feat, style_gram in zip(generated_features, style_grams):
gen_gram = gram_matrix(gen_feat)
style_loss += torch.mean((gen_gram - style_gram) ** 2)
style_loss /= len(style_grams)
# 总损失
total_loss = num2 * content_loss + num1 * style_loss
# 反向传播
total_loss.backward()
# 显示进度
if step[0] % show_every == 0 and step[0] <= num3 and step[0] != 0:
print(f"Step {step[0]}:")
print(f"Content Loss: {content_loss.item():.2f}")
print(f"Style Loss: {style_loss.item():.2f}")
print("-------------------")
# 保存中间结果
image = tensor_to_image(generated)
image.save(f"第{step[0]}次转换的结果.jpg")
step[0] += 1
return total_loss
optimizer.step(closure)
final_image = tensor_to_image(generated)
final_image.save("最终转换结果.jpg")
如果想要艺术绘画风格迁移Python代码,在后台回复
“绘画风格”
即可获取!
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:596563534@qq.com 。
AI 智能体驱动的 Linux 应急响应:从告警到报告只需一条指令
Linux内核驱动到底怎么写得又稳又快?C语言高效实现的6个关键技巧
最新文章
AI 智能体驱动的 Linux 应急响应:从告警到报告只需一条指令
如何让自己半年内学会Python,很难找全了
Linux服务器与Wordpress博客网站安全
一图看懂python的内置数据结构!!!
真实的Linux故障诊断场景 20 DNS 配置与管理
2周搞定python基础知识.第五天
Python其实就这些题,覆盖90%场景!
【第38期】21天养成编程习惯:Python刷题第21天
学Python别再东学一下西看一眼了就这几十页
Linux系统部署简单的博客
热门文章
零基础入门指南Python
Python程序设计课程记录(二)
Linux虚拟机磁盘扩容操作指导 磁盘扩容 lvm磁盘管理 xfs磁盘扩容 系统磁盘扩容
Linux Kernel 7.1合并全新的原生NTFS驱动程序 提供更高的性能和兼容性
Python可迭代对象、迭代器与生成器——理解迭代的底层机制
嵌入式实战指南---Linux下基于Opencv+Qt的手势识别
12个Linux运维常用一键脚本,运维必备收藏
Python曲线拟合实战:用scipy处理科研数据
为什么90%的人学不会Python?不是难,是卡在这一步
Linux命令每日一清单043:rsync--远程同步命令速查表
随机文章
10个月宝宝每天需要喝多少奶粉?
小白想用Python搞副业赚钱或找高薪工作?这份免费的「学习资料包」一定要收藏!
Kali与编程:Kali Linux 应急响应与取证工具速查手册
如何用Python计算CLV、CRV、CIV、CKV?
Python-一行代码画出几何宇宙
这5个Python科研神器,让我的效率提升了10倍!
科研小白开箱即用的多目标优化方法——Python灰色关联分析
国产Linux的“画皮”困境:当“我的电脑”骗了你,却教不会你真正的
Python协程真香警告:别再用线程池了!
Zabbix6.0监控Linux主机
让AI写了一个超强PHP:既能实现内网IPTV转全网通还能实现出口线路选择