C#:圣诞节内卷,铅笔画制作

C#:圣诞节内卷,铅笔画制作,第1张

C#:圣诞节内卷,铅笔画制作 前言

一年一度的圣诞节又要到了,虽然不是中国传统节日,但当下很人却很喜欢过这个欢乐的节日,并乐于打造参与属于这个节日的仪式感。

说到仪式感,仪式感有很多,比如

结婚纪念日,给你的妻子买一束鲜花,是婚姻的仪式感;
孩子过生日,给TA做一顿喜欢的饭菜或者举办一个小Party,是亲情的仪式感;
朋友升职,给他送上一份真心的祝福和喜欢的礼物,是友情的仪式感。

还有给自己喜欢的人做一个圣诞小工具,这是属于程序员的仪式感

村上春树曾说,如果没有这些小确幸,人生只不过是干巴巴的沙漠而已。回想那些感到幸福的小瞬间,总会让我们觉得简单而美好。

然而内卷也即将开始。

1、程序员必须内卷,各路语言争相竞技。

python 拥有强大的第三方库,可以制作很多精美的效果,比如绘制颗圣诞
数,做个圣诞雪人,进行图片处理等。

javascript当然不甘落后,圣诞树,玫瑰花,圣诞贺卡,页面效果等也信手拈来。

网上也有大量的相关教程可以学习,各种效果都有。

偶然在一个文章中看到了铅笔画自作,本人也加入了内卷大军中来。不过采用的是C#制作,下面介绍下如何实现。

2、世上本无圣诞老人,所有的礼物都来自爱你的人

先上效果图(图为斋藤飞鸟,网图)

(1)实现步骤

采用opencvsharp第三方库处理

  • 安装第三方库

在工具,NuGet程序包管理器中,选择管理解决方案的NuGet程序包,搜索opencv,下载openCvSharp3-AnyCPU,或者该软件最新版本

  • 图像灰度处理
public Bitmap open_cv_to_gray(String path)
{
    Mat src = new Mat(path);
    Mat result = src.CvtColor(ColorConversionCodes.BGR2GRAY);
    return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(result);
}
  • 图像反色处理
public Bitmap open_cv_to_grayscale(String path)
{
    Mat src = new Mat(path, ImreadModes.Grayscale);
    Mat result = new Mat();
    Cv2.BitwiseNot(src, result);
    return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(result);
}
  • 反色图像高斯模糊
public Bitmap open_cv_blur(Bitmap bitmap)
{
    Mat src = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap); 
    using (Mat dst = new Mat())
    {
          //注意:size 参数一定要是奇数 (均值模糊)  Y 轴模糊
          Cv2.Blur(src, dst, new OpenCvSharp.Size(21, 21), new OpenCvSharp.Point(-1, -1));
          Bitmap map = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(dst);
          return map;
    }
}
  • 高斯模糊后再次反色
public Bitmap open_cv_to_grayscale(Bitmap bitmap)
{
    Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);
    Mat result = new Mat();
    Cv2.BitwiseNot(mat, result);
    return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(result);
}
  • 最后图像计算

将灰度图和高斯模糊再次反色图进行除法运算

public Bitmap open_cv_divide(Bitmap gray, Bitmap gblur) {
    Mat mat_gray = OpenCvSharp.Extensions.BitmapConverter.ToMat(gray); 
    Mat mat_gblur = OpenCvSharp.Extensions.BitmapConverter.ToMat(gblur);

    Mat outmat = new Mat();
    Cv2.Divide(mat_gray, mat_gblur, outmat, 256);//矩阵相除

    Cv2.WaitKey(0);
    return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(outmat);
}

流程如上,安照流程处理就可实现上述效果啦。

(2)下载地址

工具下载地址:
https://download.csdn.net/download/slaron/68210720

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5679836.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存