传入一张图,生成它的油画版!(python实现)(转 )
来自:https://blog.csdn.net/miracleoa/article/details/104210597
import cv2 import numpy def oilPainting(img, templateSize, bucketSize, step): # templateSize模板大小,bucketSize桶阵列,step模板滑动步长 gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) gray = ((gray / 256) * bucketSize).astype(int) # 灰度图在桶中的所属分区 h, w = img.shape[:2] oilImg = numpy.zeros(img.shape, numpy.uint8) # 用来存放过滤图像 for i in range(0, h, step): top = i - templateSize bottom = i + templateSize + 1 if top < 0: top = 0 if bottom >= h: bottom = h - 1 for j in range(0, w, step): left = j - templateSize right = j + templateSize + 1 if left < 0: left = 0 if right >= w: right = w - 1 # 灰度等级统计 buckets = numpy.zeros(bucketSize, numpy.uint8) # 桶阵列,统计在各个桶中的灰度个数 bucketsMean = [0, 0, 0] # 对像素最多的桶,求其桶中所有像素的三通道颜色均值 # 对模板进行遍历 for c in range(top, bottom): for r in range(left, right): buckets[gray[c, r]] += 1 # 模板内的像素依次投入到相应的桶中,有点像灰度直方图 maxBucket = numpy.max(buckets) # 找出像素最多的桶以及它的索引 maxBucketIndex = numpy.argmax(buckets) for c in range(top, bottom): for r in range(left, right): if gray[c, r] == maxBucketIndex: bucketsMean += img[c, r] bucketsMean = (bucketsMean / maxBucket).astype(int) # 三通道颜色均值 # 油画图 for m in range(step): for n in range(step): oilImg[m + i, n + j] = (bucketsMean[0], bucketsMean[1], bucketsMean[2]) return oilImg img = cv2.imread(r'my.jpg', cv2.IMREAD_ANYCOLOR) oil = oilPainting(img, 4, 8, 2) cv2.imshow('youhua', oil) cv2.imwrite(r'myyouhua.jpg', oil)
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2019-02-08 ArcGIS教程:曲率
2017-02-08 ArcGIS for Android地图上实际距离与对应的屏幕像素值计算
2017-02-08 arcgis10.2转shp文件中文乱码问题解决方案