UNPKG

@mlikiowa/nanaeo

Version:
198 lines (190 loc) 43.9 kB
<?xml version="1.0"?> <rss version="2.0"> <channel> <title>Village</title> <link>https://nanaeo.cn</link> <description>It is a little blog~</description> <language>zh-CN,en,default</language> <pubDate>Sat, 30 Dec 2023 16:00:00 +0000</pubDate> <lastBuildDate>Sat, 30 Dec 2023 16:00:00 +0000</lastBuildDate> <category>DevLog</category> <category>Gauss</category> <category>SiteLog</category> <category>HexoThemes</category> <category>Hexo</category> <item> <guid isPermalink="true">https://nanaeo.cn/2023/12/30/2023end/</guid> <title>博客优化与压缩软件</title> <link>https://nanaeo.cn/2023/12/30/2023end/</link> <category>DevLog</category> <category>Gauss</category> <pubDate>Sat, 30 Dec 2023 16:00:00 +0000</pubDate> <description><![CDATA[ &lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;近况&#34;&gt;&lt;a href=&#34;#近况&#34; class=&#34;headerlink&#34; title=&#34;近况&#34;&gt;&lt;/a&gt;近况&lt;/h2&gt;&lt;p&gt;很久没更新博客了,我觉得回来水一篇,大家也不用考虑我会跑路了,博客域名续了10年,别问钱哪里来的,问就是免费报销的。&lt;br&gt;说回来,很久没写文了不是别的原因,就是因为没米赚没什么回报,而且说仅仅为了写文干什么没有动力,如果为了赚流量为什么不恰烂钱&lt;br&gt;所以说不如鸽了躺在床上,但是最近在写项目,顺便空闲时间给博客直接改造升级一波,然后顺手也写了篇博文总结下最近。&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;对于整个站点的优化&#34;&gt;&lt;a href=&#34;#对于整个站点的优化&#34; class=&#34;headerlink&#34; title=&#34;对于整个站点的优化&#34;&gt;&lt;/a&gt;对于整个站点的优化&lt;/h2&gt;&lt;p&gt;内部:&lt;br&gt;我对原来的sw.js切换成了官方的Service-Worker.js 然后官方的缓存策略还是很给力的,同时换了张4K背景图格式为WEBP,由原来的vercel拉去githubpage镜像资源改为了vercel也同步生成。&lt;br&gt;同时对老掉牙的Volantis版本升级到了5.8.x版本&lt;/p&gt; &lt;p&gt;外部:对英语字体换成了仿苏芙比字体,可以看到非常Cute,这个字体大家偷的时候注意下,不要用于商用,是仿的游戏人物手写,而且我是在b站up那里偷来的,很遗憾不支持中文哦。&lt;/p&gt; &lt;p&gt;虽然修改很少,但是Volantis爆改这样的配色这样的字体,你绝对没见过第二家。&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;开源项目-NuCat&#34;&gt;&lt;a href=&#34;#开源项目-NuCat&#34; class=&#34;headerlink&#34; title=&#34;开源项目 NuCat&#34;&gt;&lt;/a&gt;开源项目 NuCat&lt;/h2&gt;&lt;p&gt;刚刚不是说最近在做项目吗,诺?下面就是 最近把我老腰要了的项目&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;一切的源头&#34;&gt;&lt;a href=&#34;#一切的源头&#34; class=&#34;headerlink&#34; title=&#34;一切的源头&#34;&gt;&lt;/a&gt;一切的源头&lt;/h2&gt;&lt;p&gt;正在上网的我收到了WinRar让我付费还是看广告的两难选项,我肯定是一个都不会选的,那么眼下我只能找其它免费的压缩软件了,由7zip bandzip很多优秀的产品,但是有没有想过bandzip也是付费的,7zip的界面过于复古,那么对于我这种既要又要的人,能不能有一个 开源 免费 可以换皮肤 支持多语言 又不那么臃肿的压缩软件呢,也许但是仍未被我发现,但是有没有可能我可以写,在这种原因驱动下我开始了NuCat压缩软件的开发。&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;工具与环境&#34;&gt;&lt;a href=&#34;#工具与环境&#34; class=&#34;headerlink&#34; title=&#34;工具与环境&#34;&gt;&lt;/a&gt;工具与环境&lt;/h2&gt;&lt;p&gt;这个很好选,按照习惯我直接选择 CMAKE+MSVC+VSCODE ,虽然是单平台开发,但是CMAKE可以很方便设置依赖 设置参数 同时可读性高,MSVC则是比较优秀的CPP编译器,VSCODE和VS开发CPP都还行,但是VS有时候容易抽风。&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;食材的选材&#34;&gt;&lt;a href=&#34;#食材的选材&#34; class=&#34;headerlink&#34; title=&#34;食材的选材&#34;&gt;&lt;/a&gt;食材的选材&lt;/h2&gt;&lt;p&gt;数据交换和数据储存肯定是Json格式,而对于界面和我的需求相呼应的选项肯定不是QT ,WIN UI 2&amp;#x2F;3 等等,这类不符合我像一天一老婆的习惯,而且本身我UI不是特别擅长,如果我有位朋友会写WEB,灵感不就来了吗,基于各种原因Webview来展示界面就是最佳选项,cpp上在win32可用webview有很多,但cef electron等等库都与我的小而美冲突,要小小的才可爱,于是我们可以敲定webview2作为核心技术,但是在开发中对com等等不太熟悉吧,根据onebot我们得出一切皆可one,那么肯定来说webview2作为可选引擎来进行封装的库是有的,可以切换浏览器内核,接口操作上比webview2提供的api好用,果然在我们的寻找中找到webview&amp;#x2F;webview这个项目,我将这个项目作为我们的webview,然后我们还剩一个问题就是说解压压缩怎么办,涉及算法而且各种格式兼容过于麻烦摆在我的选择只有两条,调用7zip的命令行或者sdk,但是调7zip命令行需要按照7zip,使用sdk又如webview2一样接口难以操作,我找到bit7z库提供了对7zip的动态库操作,这样我们就找到了我们所有需要的库。&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;编码的选择&#34;&gt;&lt;a href=&#34;#编码的选择&#34; class=&#34;headerlink&#34; title=&#34;编码的选择&#34;&gt;&lt;/a&gt;编码的选择&lt;/h2&gt;&lt;p&gt;一切都很规范 bit7z yyjson webview&amp;#x2F;webview都是支持utf8,但是存在一个问题我是针对WinX64进行开发,采用UTF16或者ANSI调用才能正常调用接口,所以我们大部分采用UTF8,少部分WIN API进行UTF8转UTF16操作,按照规范执行&lt;br&gt;内码:UTF8&lt;br&gt;外码:UTF16&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;开发体验&#34;&gt;&lt;a href=&#34;#开发体验&#34; class=&#34;headerlink&#34; title=&#34;开发体验&#34;&gt;&lt;/a&gt;开发体验&lt;/h2&gt;&lt;p&gt;1.很久没有再次开发过WIN32 窗口程序了,上次是N年前了,我已经很久没开发过了,本次可以说我是傻瓜,因为WEBVIEW的com技术我没弄过,弄懂这个到放弃我直接换库了,还有就是无边框窗口保留阴影和窗口随意移动花费了很多时间,无边框会在上方有6px白边问题 主要是因为我想保留窗口阴影同时让他无边框,但是这样会存在6px非客户区 ,解决方法就是放弃阴影,然后用dwm api再绘出来,当然还有其它方案,比如自己用gdi绘阴影,但是确实只能说麻烦。&lt;br&gt;2.找罪受就来写这个,查资料没给我送走,webview&amp;#x2F;webview虽然说好于webview2体验,但是说它屏蔽大量操作,resize webview都做不到,没办法,我只能爆改他的代码了,体验非常的差&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;总结一下&#34;&gt;&lt;a href=&#34;#总结一下&#34; class=&#34;headerlink&#34; title=&#34;总结一下&#34;&gt;&lt;/a&gt;总结一下&lt;/h2&gt;&lt;p&gt;没事不要瞎折腾,对于写这Nucat压缩软件这是就像赛博顶真一样,绕了路,WIN11 预览版内置压缩软件 WIN10正式版都是能解压ZIP RAR等常见的格式,所以说为什么这么麻烦,大家静静等待就行,或者说不嫌弃7Zip丑,还是可以用用7zip的。&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;至-x2F-2024&#34;&gt;&lt;a href=&#34;#至-x2F-2024&#34; class=&#34;headerlink&#34; title=&#34;至&amp;#x2F;2024&#34;&gt;&lt;/a&gt;至&amp;#x2F;2024&lt;/h2&gt;&lt;p&gt;收回上面的话,至此讲点别的吧,马上将要到来2024,回想起来觉得什么也没有干,从前的雄心破碎在着畸形的互联网,不知道什么在推动着我对这份行业和对这专业的热爱,也许是从前一句论坛上的坚持下去亦或者是n年前贴友的相互激励,在这个流量与互联网畸形的时代,我仍然坚持着少刷短视频 多创造一些属于自己的东西,抛开阴霾,让我们忘记掉2023一切的劳累与不如意 ,带着期望来到2024,我们的路依然漫漫&lt;/p&gt; &lt;/div&gt; ]]></description> </item> <item> <guid isPermalink="true">https://nanaeo.cn/2022/08/13/GaussWave/</guid> <title>高斯滤波</title> <link>https://nanaeo.cn/2022/08/13/GaussWave/</link> <category>DevLog</category> <category>Gauss</category> <pubDate>Sat, 13 Aug 2022 16:00:00 +0000</pubDate> <description><![CDATA[ &lt;p&gt;高斯滤波的实现&lt;/p&gt; &lt;span id=&#34;more&#34;&gt;&lt;/span&gt; &lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;本文提示&#34;&gt;&lt;a href=&#34;#本文提示&#34; class=&#34;headerlink&#34; title=&#34;本文提示&#34;&gt;&lt;/a&gt;本文提示&lt;/h2&gt;&lt;p&gt;本文提供了相关代码和算法仅为示例学习,并非标准案例,并且OpenCV提供了高斯滤波函数,如果遇到不明白的概念和地方可以参考引用文章理解,也可以尝试在搜索引擎上搜索相关概念和图片示例,由于本站资源原因,暂不提供图片。&lt;/p&gt; &lt;p&gt;tips: 本文为了方便仅是灰度图片处理&lt;br&gt;如果需要彩色图片应该尝试修改代码三种通道进行分别处理或其它方法。&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;概念理解-部分来自百科等&#34;&gt;&lt;a href=&#34;#概念理解-部分来自百科等&#34; class=&#34;headerlink&#34; title=&#34;概念理解(部分来自百科等)&#34;&gt;&lt;/a&gt;概念理解(部分来自百科等)&lt;/h2&gt;&lt;h3 id=&#34;滤波&#34;&gt;&lt;a href=&#34;#滤波&#34; class=&#34;headerlink&#34; title=&#34;滤波&#34;&gt;&lt;/a&gt;滤波&lt;/h3&gt;&lt;p&gt;滤波就对图像像素点及其邻域点的灰度值按照一定的参数规则进行加权平均,可以有效滤去理想图像中叠加的高频噪声。常用的滤波有线性滤波、中值滤波、均值滤波、双边滤波、高斯滤波等。滤波有抑制噪声的作用,但这会使得图像边缘模糊。(摘自别的地方)&lt;/p&gt; &lt;h3 id=&#34;低通滤波&#34;&gt;&lt;a href=&#34;#低通滤波&#34; class=&#34;headerlink&#34; title=&#34;低通滤波&#34;&gt;&lt;/a&gt;低通滤波&lt;/h3&gt;&lt;p&gt;低通滤波是一种过滤方式,规则为低频信号能正常通过,而超过设定临界值的高频信号则被阻隔、减弱,图像处理领域可用来模糊。&lt;/p&gt; &lt;h3 id=&#34;高通滤波&#34;&gt;&lt;a href=&#34;#高通滤波&#34; class=&#34;headerlink&#34; title=&#34;高通滤波&#34;&gt;&lt;/a&gt;高通滤波&lt;/h3&gt;&lt;p&gt;高通滤波(high-pass filter) 是一种过滤方式,规则为高频信号能正常通过,而低于设定临界值的低频信号则被阻隔、减弱。但是阻隔、减弱的幅度则会依据不同的频率以及不同的滤波程序(目的)而改变,图像处理领域可用于锐化。&lt;/p&gt; &lt;h3 id=&#34;高斯滤波&#34;&gt;&lt;a href=&#34;#高斯滤波&#34; class=&#34;headerlink&#34; title=&#34;高斯滤波&#34;&gt;&lt;/a&gt;高斯滤波&lt;/h3&gt;&lt;p&gt;高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程,对处理呈现正态分布(高斯分布)的噪声(包括图像噪声)效果显著。&lt;br&gt;tips: 常用高斯模糊就是使用高斯滤波完成的, 高斯模糊是低通滤波的一种, 也就是滤波函数是低通高斯函数, 但是高斯滤波是指用高斯函数作为滤波函数, 至于是不是模糊,要看是高斯低通还是高斯高通, 低通就是模糊, 高通就是锐化。&lt;/p&gt; &lt;h3 id=&#34;核算子、模板、结构都是一种&#34;&gt;&lt;a href=&#34;#核算子、模板、结构都是一种&#34; class=&#34;headerlink&#34; title=&#34;核算子、模板、结构都是一种&#34;&gt;&lt;/a&gt;核算子、模板、结构都是一种&lt;/h3&gt;&lt;p&gt;当我们进行图像处理时时,使用到的权用一个矩阵表示,可以利用该矩阵计算对应像素,同时我们叫这个矩阵为核算子、模板、结构。(示例见前提指明)&lt;br&gt;大小可小可大,并且一般为奇数,&lt;br&gt;Que:核大小为什么是都是类似3×3&amp;#x2F;5×5 奇数呢?&lt;br&gt;其中一个原因是定位中心锚点,偶数是无法确定中心点的。&lt;/p&gt; &lt;h3 id=&#34;滤波核&#34;&gt;&lt;a href=&#34;#滤波核&#34; class=&#34;headerlink&#34; title=&#34;滤波核&#34;&gt;&lt;/a&gt;滤波核&lt;/h3&gt;&lt;p&gt;当进行滤波时,里面是核的内容是权重并且可以用于处理像素,那么该核称为滤波核。&lt;br&gt;(通俗解释 专业解释 请查询资料)&lt;/p&gt; &lt;h3 id=&#34;归一化&#34;&gt;&lt;a href=&#34;#归一化&#34; class=&#34;headerlink&#34; title=&#34;归一化&#34;&gt;&lt;/a&gt;归一化&lt;/h3&gt;&lt;p&gt;就是生成核或者说模板加起来的权不为一,这时候我们核内每一个值除以核内总值,就实现了归一化。&lt;/p&gt; &lt;h3 id=&#34;卷积核&#34;&gt;&lt;a href=&#34;#卷积核&#34; class=&#34;headerlink&#34; title=&#34;卷积核&#34;&gt;&lt;/a&gt;卷积核&lt;/h3&gt;&lt;p&gt;如果一个核被用于卷积那么该核也可以被称为卷积核。(通俗解释 专业解释 请查询资料)&lt;/p&gt; &lt;h3 id=&#34;高斯核&#34;&gt;&lt;a href=&#34;#高斯核&#34; class=&#34;headerlink&#34; title=&#34;高斯核&#34;&gt;&lt;/a&gt;高斯核&lt;/h3&gt;&lt;p&gt;那么高斯核固然就是高斯分布生成的核了&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;环境与依赖&#34;&gt;&lt;a href=&#34;#环境与依赖&#34; class=&#34;headerlink&#34; title=&#34;环境与依赖&#34;&gt;&lt;/a&gt;环境与依赖&lt;/h2&gt;&lt;p&gt;Python 本次使用的编程语言&lt;br&gt;OpenCV 跨平台计算机视觉库&lt;br&gt;Windows11 本文中代码运行系统&lt;/p&gt; &lt;h3 id=&#34;OpenCv库安装&#34;&gt;&lt;a href=&#34;#OpenCv库安装&#34; class=&#34;headerlink&#34; title=&#34;OpenCv库安装&#34;&gt;&lt;/a&gt;OpenCv库安装&lt;/h3&gt;&lt;p&gt;(清华源 可自行切换)&lt;/p&gt; &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;举例&#34;&gt;&lt;a href=&#34;#举例&#34; class=&#34;headerlink&#34; title=&#34;举例&#34;&gt;&lt;/a&gt;举例&lt;/h2&gt;&lt;p&gt;最终滤波核示例 (提示:权请保证和为1 此处已经归一化 但并非真实情况)&lt;br&gt;0.1 0.1 0.2&lt;br&gt;0.1 0.1 0.1&lt;br&gt;0.1 0.1 0.1&lt;/p&gt; &lt;p&gt;为3×3网格坐标结构&lt;br&gt;该模板大小 3×3&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;算法过程&#34;&gt;&lt;a href=&#34;#算法过程&#34; class=&#34;headerlink&#34; title=&#34;算法过程&#34;&gt;&lt;/a&gt;算法过程&lt;/h2&gt;&lt;h3 id=&#34;高斯滤波实现方法&#34;&gt;&lt;a href=&#34;#高斯滤波实现方法&#34; class=&#34;headerlink&#34; title=&#34;高斯滤波实现方法&#34;&gt;&lt;/a&gt;高斯滤波实现方法&lt;/h3&gt;&lt;p&gt;看完以上相信各位并没有很多理解,并不要紧,联系实际我们进一步进行&lt;br&gt;高斯滤波通常情况下有两种实现方式,一是用离散化窗口滑窗卷积, 另一种通过傅里叶变换,其中第一种毕竟常见,可能这时候有人又问了,这又是什么,别急,咱先慢慢来,离散化窗口滑窗卷积其实就是进行有限次的移动核运算区域的卷积运算,那么我们可以开始了。&lt;/p&gt; &lt;h3 id=&#34;算法过程-1&#34;&gt;&lt;a href=&#34;#算法过程-1&#34; class=&#34;headerlink&#34; title=&#34;算法过程&#34;&gt;&lt;/a&gt;算法过程&lt;/h3&gt;&lt;p&gt;0.图像灰度处理 (为了方便)&lt;/p&gt; &lt;ol&gt; &lt;li&gt;生成滤波核&lt;/li&gt; &lt;li&gt;进行卷积处理图像&lt;/li&gt; &lt;/ol&gt; &lt;h3 id=&#34;生成滤波核&#34;&gt;&lt;a href=&#34;#生成滤波核&#34; class=&#34;headerlink&#34; title=&#34;生成滤波核&#34;&gt;&lt;/a&gt;生成滤波核&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif&#34; class=&#34;lazyload&#34; data-srcset=&#34;https://s2.loli.net/2022/08/14/4dgAQ2RCInSM8m6.gif&#34; srcset=&#34;data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==&#34; alt=&#34;CodeCogsEqn.gif&#34;&gt;&lt;br&gt;(此处为一维高斯函数)&lt;/p&gt; &lt;p&gt;sigma 为标准差 图像平滑程度取决于该值&lt;br&gt;我们使用高斯函数进行生成对应滤波核&lt;br&gt;离中心点越远那么边缘值的权值越小,我们依照高斯二维函数就可以生成对应滤波核。&lt;br&gt;代码具体参考如下&lt;/p&gt; &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;def GaussKernel(size,k,sigma):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t = np.zeros((size,size),np.float32)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; norm = math.pow(i-k,2) + pow(j-k,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = np.sum(_t)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = _t/sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return kernel&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt; &lt;h3 id=&#34;卷积生成&#34;&gt;&lt;a href=&#34;#卷积生成&#34; class=&#34;headerlink&#34; title=&#34;卷积生成&#34;&gt;&lt;/a&gt;卷积生成&lt;/h3&gt;&lt;p&gt;然后我们使用对应的滤波权值进行乘以像素值,就可以生成新值,但是滤波核仅3×3大小,我们在原图像每一个像素点运算一次,即可生成新的图形。&lt;br&gt;运算为: 每个像素点周围点 权×值 的和为中心点新值。&lt;/p&gt; &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;def mygaussFilter(img_gray,kernel):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; h,w = img_gray.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k_h,k_w = kernel.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range(int(k_h/2),h-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range(int(k_h/2),w-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = 0&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for k in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for l in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray[i,j] = sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return img_gray&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;样例代码&#34;&gt;&lt;a href=&#34;#样例代码&#34; class=&#34;headerlink&#34; title=&#34;样例代码&#34;&gt;&lt;/a&gt;样例代码&lt;/h2&gt;&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;import math&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;import cv2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;import numpy as np&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;def GaussKernel(size,k,sigma):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t = np.zeros((size,size),np.float32)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range (size):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; norm = math.pow(i-k,2) + pow(j-k,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; _t[i,j] = math.exp(-norm/(2*math.pow(sigma,2)))/2*math.pi*pow(sigma,2)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = np.sum(_t)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = _t/sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return kernel&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;def mygaussFilter(img_gray,kernel):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; h,w = img_gray.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k_h,k_w = kernel.shape&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for i in range(int(k_h/2),h-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for j in range(int(k_h/2),w-int(k_h/2)):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum = 0&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for k in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; for l in range(0,k_h):&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; sum += img_gray[i-int(k_h/2)+k,j-int(k_h/2)+l]*kernel[k,l]&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray[i,j] = sum&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; return img_gray&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;if __name__ == &amp;#x27;__main__&amp;#x27;:&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img = cv2.imread(&amp;quot;demo.jpg&amp;quot;)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_g = img_gray.copy()&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; k=1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; size = 2*k+1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; kernel = gausskernel(size,k,1.5)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; print(kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_B,img_G,img_R = cv2.split(img)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_B = mygaussFilter(img_B,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_G = mygaussFilter(img_G,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss_R = mygaussFilter(img_R,kernel)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_gauss = cv2.merge([img_gauss_B,img_gauss_G,img_gauss_R])&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; img_comp = np.hstack((img,img_gauss))&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; cv2.imshow(&amp;quot;gauss&amp;quot;,img_comp)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; cv2.waitKey(0)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;直接OpenCV操作-非原理实现方案-使用封装方法&#34;&gt;&lt;a href=&#34;#直接OpenCV操作-非原理实现方案-使用封装方法&#34; class=&#34;headerlink&#34; title=&#34;直接OpenCV操作(非原理实现方案 使用封装方法)&#34;&gt;&lt;/a&gt;直接OpenCV操作(非原理实现方案 使用封装方法)&lt;/h2&gt;&lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;import cv2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;Gn=cv2.imread(&amp;quot;Gaussian_noise.jpg&amp;quot;) &lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;Gf=cv2.GaussianBlur(Gn,(3,3),0,0)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.imshow(&amp;quot;噪声图像&amp;quot;,Gn)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.imshow(&amp;quot;滤波图像&amp;quot;,Gf)&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.waitKey()&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cv2.destroyAllWindows()&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;Que-边界点的处理&#34;&gt;&lt;a href=&#34;#Que-边界点的处理&#34; class=&#34;headerlink&#34; title=&#34;Que: 边界点的处理&#34;&gt;&lt;/a&gt;Que: 边界点的处理&lt;/h2&gt;&lt;p&gt;如果一个点处于边界,周边没有足够的点,怎么办?&lt;br&gt;一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。&lt;br&gt;当然我们这里很简单,就是进行矩阵补零上去,用零进行模拟完整矩阵。&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#总结&#34; class=&#34;headerlink&#34; title=&#34;总结&#34;&gt;&lt;/a&gt;总结&lt;/h2&gt;&lt;p&gt;高斯滤波可以让图像高斯噪声降低,并且平滑图像,并且opencv等库已经提供封装,我们可以很快的使用&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;文章引用&#34;&gt;&lt;a href=&#34;#文章引用&#34; class=&#34;headerlink&#34; title=&#34;文章引用&#34;&gt;&lt;/a&gt;文章引用&lt;/h2&gt;&lt;p&gt;高斯滤波&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_51571728/article/details/121527964&#34;&gt;https://blog.csdn.net/weixin_51571728/article/details/121527964&lt;/a&gt;&lt;br&gt;高斯滤波核&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/qqq777_/article/details/112800310&#34;&gt;https://blog.csdn.net/qqq777_/article/details/112800310&lt;/a&gt;&lt;br&gt;有关线性滤波、滤波核的基本概念(概念理解)&lt;br&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_42664622/article/details/103672899&#34;&gt;https://blog.csdn.net/weixin_42664622/article/details/103672899&lt;/a&gt;&lt;br&gt;数字图像处理基础 — 高斯滤波&lt;br&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/82569305&#34;&gt;https://zhuanlan.zhihu.com/p/82569305&lt;/a&gt;&lt;br&gt;图像滤波原理(不推荐)&lt;br&gt;&lt;a href=&#34;https://view.inews.qq.com/a/20220425A06HHF00&#34;&gt;https://view.inews.qq.com/a/20220425A06HHF00&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;提示&#34;&gt;&lt;a href=&#34;#提示&#34; class=&#34;headerlink&#34; title=&#34;提示&#34;&gt;&lt;/a&gt;提示&lt;/h2&gt;&lt;p&gt;该文章并不准确,如果有错误请积极指出。&lt;/p&gt; &lt;/div&gt; ]]></description> </item> <item> <guid isPermalink="true">https://nanaeo.cn/2022/08/04/NewBlog/</guid> <title>新博客建好啦</title> <link>https://nanaeo.cn/2022/08/04/NewBlog/</link> <category>SiteLog</category> <category>HexoThemes</category> <category>Hexo</category> <pubDate>Thu, 04 Aug 2022 16:00:00 +0000</pubDate> <description><![CDATA[ &lt;p&gt;Hi Hexo,I am Mlikiowa!&lt;br&gt;是全新的Hexo&amp;#x2F;vlolantis博客,我又回来写博客了!&lt;/p&gt; &lt;span id=&#34;more&#34;&gt;&lt;/span&gt; &lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;回忆&#34;&gt;&lt;a href=&#34;#回忆&#34; class=&#34;headerlink&#34; title=&#34;回忆&#34;&gt;&lt;/a&gt;回忆&lt;/h2&gt;&lt;div class=&#34;timeline&#34;&gt;&lt;div class=&#34;timenode&#34;&gt;&lt;div class=&#34;meta&#34;&gt;&lt;p&gt;&lt;p&gt;2019.Previous&lt;/p&gt; &lt;/p&gt;&lt;/div&gt;&lt;div class=&#34;body&#34;&gt;&lt;p&gt;使用过Emlog Wordpress来搭建博客,使用过各种博客系统,体验不能说差,只能说没有。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class=&#34;timenode&#34;&gt;&lt;div class=&#34;meta&#34;&gt;&lt;p&gt;&lt;p&gt;2019.Done&lt;/p&gt; &lt;/p&gt;&lt;/div&gt;&lt;div class=&#34;body&#34;&gt;&lt;p&gt;开始尝试在CSDN 简书平台发布自己的文章,但是后来因为咱不太喜欢平台限制,遂转入Typecho来搭建博客。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class=&#34;timenode&#34;&gt;&lt;div class=&#34;meta&#34;&gt;&lt;p&gt;&lt;p&gt;2020.Done&lt;/p&gt; &lt;/p&gt;&lt;/div&gt;&lt;div class=&#34;body&#34;&gt;&lt;p&gt;一开始typecho小而美的感觉是很不错的体验,加上我正好会使用PHP,能自己搓插件,所以体验还不错。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class=&#34;timenode&#34;&gt;&lt;div class=&#34;meta&#34;&gt;&lt;p&gt;&lt;p&gt;2021.Done&lt;/p&gt; &lt;/p&gt;&lt;/div&gt;&lt;div class=&#34;body&#34;&gt;&lt;p&gt;期间域名备案和准备高考,并搭建了一个运行在国内的typecho博客。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class=&#34;timenode&#34;&gt;&lt;div class=&#34;meta&#34;&gt;&lt;p&gt;&lt;p&gt;2022.Done&lt;/p&gt; &lt;/p&gt;&lt;/div&gt;&lt;div class=&#34;body&#34;&gt;&lt;p&gt;上半年:因为没有空闲时间打理博客,备案因无法联系注销,后来意外将电脑中typecho的备份删除,故跑路。&lt;br&gt;下半年:借大佬之手找回了数据,但准备重新开始,于是依靠Hexo搭建了全新的博客,走上了白嫖之路。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;事件前言:&lt;/strong&gt; 各位好啊,以上就是我的悲剧经历了,现在我又新搭了博客,使用Hexo博客来进行搭建,依托serverless和action等工具实现。&lt;/p&gt; &lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;备案悲剧:&lt;/strong&gt; 之前我一直使用typecho,服务器和域名在国内备案,高中学业繁忙,每天都忙着学习。&lt;br&gt;所以个人就没有时间处理相关的事情,审核电话我也没有接到,导致国内备案掉了,加上本来博文写的就不怎么样,后来干脆就直接删掉跑路了,虽然后面通过大佬进行找回了,我也是决定从头开始了。&lt;/p&gt; &lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;计划上线:&lt;/strong&gt; 直到2022年的下半年毕业,我终于想起时修理博客,却又嫌折腾博客麻烦,国内备案审核挺烦。&lt;br&gt;本来是计划在另一位大佬那里使用Typecho搭建博客,因为typecho某些地方有些实在是难受,导致我实在是忍受不了痛苦了(恼,于是很快决定更换博客系统。&lt;/p&gt; &lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;实际行动:&lt;/strong&gt; 于是我决定博客使用hexo搭建,并且以低成本实现搭个稳定的博客,&lt;br&gt;本博客是非常容易在新设备上使用,轻松可以在新的地方迁移使用,将跑路可能性降到最低了。&lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 id=&#34;博客运行环境&#34;&gt;&lt;a href=&#34;#博客运行环境&#34; class=&#34;headerlink&#34; title=&#34;博客运行环境&#34;&gt;&lt;/a&gt;博客运行环境&lt;/h3&gt;&lt;div class=&#34;table&#34;&gt;&lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Name&lt;/th&gt; &lt;th&gt;Content&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt;Blog&lt;/td&gt; &lt;td&gt;Hexo&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Theme&lt;/td&gt; &lt;td&gt;volantis&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;platform&lt;/td&gt; &lt;td&gt;vercel&Github&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;domain&lt;/td&gt; &lt;td&gt;nanaeo.cn&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;小吐槽:&lt;/strong&gt; 之前还想试试&lt;code&gt;hexo-theme-diaspora&lt;/code&gt;这样的主题,&lt;br&gt;这款博客是从wp移植到hexo的,介绍图很好看,可惜作者没更新了,于是我只能选择其它主题了。&lt;br&gt;所以我换成了&lt;strong&gt;volantis&lt;/strong&gt;主题 (&lt;code&gt;npm -i hexo-theme-volantis&lt;/code&gt; 可以轻松安装),个人感觉色调和布局都很好看,可玩程度很高。&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;博客搭建&#34;&gt;&lt;a href=&#34;#博客搭建&#34; class=&#34;headerlink&#34; title=&#34;博客搭建&#34;&gt;&lt;/a&gt;博客搭建&lt;/h2&gt;&lt;div class=&#34;tag link&#34;&gt;&lt;a class=&#34;link-card&#34; title=&#34;本博客源码项目&#34; href=&#34;https://github.com/MliKiowa/MliKiowa.github.io&#34;&gt;&lt;div class=&#34;left&#34;&gt;&lt;img src=&#34;https://q1.qlogo.cn/g?b=qq&amp;nk=1627126029&amp;s=100&#34; class=&#34;lazyload&#34; data-srcset=&#34;https://q1.qlogo.cn/g?b=qq&amp;nk=1627126029&amp;s=100&#34; srcset=&#34;data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==&#34;/&gt;&lt;/div&gt;&lt;div class=&#34;right&#34;&gt;&lt;p class=&#34;text&#34;&gt;本博客源码项目&lt;/p&gt;&lt;p class=&#34;url&#34;&gt;https://github.com/MliKiowa/MliKiowa.github.io&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;本博客通过使用GithubAction等方式生成部署分发博文到如githubpage vercel等服务商&lt;br&gt;至于推送到&lt;code&gt;cos/oss .etc storage bucket&lt;/code&gt;还是算了,毕竟谁用谁欠费(容易挨打,好点情况也得宕了)。&lt;/p&gt; &lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;小提示:&lt;/strong&gt; 使用多服务商涉及到Dns分流,像腾讯Dnspod的这种解析服务要交钱升级才能使用,非常的难受,所以我考虑使用动态Api进行切换dns解析。&lt;/p&gt; &lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;strong&gt;小吐槽:&lt;/strong&gt; 居然&lt;code&gt;github workflow&lt;/code&gt;只有已经写好的&lt;code&gt;deploy hugo site to githubpage workflow&lt;/code&gt;,没有hexo自动部署的脚步,于是我照猫画虎写了一个Hexo自动部署脚本,但因水平太菜,用这个workflow还得我改了半天。&lt;br&gt;正当我吐槽这么大个github没人发布自动部署脚本的时候,我在github search找到了类似的workflow,但是我已经写完了,难受。&lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;迁移使用&#34;&gt;&lt;a href=&#34;#迁移使用&#34; class=&#34;headerlink&#34; title=&#34;迁移使用&#34;&gt;&lt;/a&gt;迁移使用&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;本博客通过以下脚本可以快速迁移,从云端Github下载源码然后在本地进行编写博文,提交后直接在使用action刷新博客。 (该内容已经失效)&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Tips:&lt;/strong&gt; 如果你有需要也可以执行以下脚本建立新博客,可以轻松在新设备上运行。&lt;details &gt;&lt;summary&gt; bash.sh &lt;/summary&gt; &lt;div class=&#39;content&#39;&gt; &lt;figure class=&#34;highlight plaintext&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;git clone https://github.com/MliKiowa/nanaeo&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;cd MliKiowa.github.io&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;npm install&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;hexo g&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt; &lt;/div&gt; &lt;/details&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;博客内容&#34;&gt;&lt;a href=&#34;#博客内容&#34; class=&#34;headerlink&#34; title=&#34;博客内容&#34;&gt;&lt;/a&gt;博客内容&lt;/h2&gt;&lt;div class=&#34;table&#34;&gt;&lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Classification&lt;/th&gt; &lt;th&gt;Content&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt;Dev Exp&lt;/td&gt; &lt;td&gt;Free Developer&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Site Log&lt;/td&gt; &lt;td&gt;Site Maintenance Log&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Life Log&lt;/td&gt; &lt;td&gt;Record your life&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;小提示:&lt;/strong&gt; 内容的主要以编程和生活为主,不会有资源推荐,也不接受类似站点友链。&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;&lt;div class=&#34;story post-story&#34;&gt;&lt;h2 id=&#34;期盼&#34;&gt;&lt;a href=&#34;#期盼&#34; class=&#34;headerlink&#34; title=&#34;期盼&#34;&gt;&lt;/a&gt;期盼&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;&lt;strong&gt;域名问题:&lt;/strong&gt; 原来的域名看起来好憨,还被&lt;strong&gt;我朋友嘲笑了&lt;/strong&gt;,因此旧域名怎么能配得上新博客,所以我还是注册个符合气质的新域名啊,所以nanaeo.cn诞生了,寓意没有很特别,全凭感觉来,可爱就对了不是嘛(歪头&lt;/li&gt; &lt;li&gt;&lt;strong&gt;跑路问题:&lt;/strong&gt; 折腾数次各种博客的我真的是太累了,所以本博客能run起来我觉得不是不会去折腾什么新博客了,但是请允许我说一句,我正在努力成为年更博主吧,半年一更就是高产!&lt;/li&gt; &lt;li&gt;&lt;strong&gt;内容布局:&lt;/strong&gt; 咱正在正在摸索,你现在看到的排版全是我正在尝试的,我很少使用Hexo,可以说是全新的萌新,但是让我来慢慢完善应该没有任何问题。&lt;/li&gt; &lt;li&gt;&lt;strong&gt;图床问题:&lt;/strong&gt; 这个问题我根本不知道怎么解决我还是摆烂吧,博文能不放图我绝对不会放图出来。&lt;/li&gt; &lt;li&gt;&lt;strong&gt;总结一下:&lt;/strong&gt; 这就是Mlikiowa全新的博客了,Always believe that something wonderful is about to happen.Let’s go!&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; ]]></description> </item> </channel> </rss>