电子价签玩法
最近在逛咸鱼时发现了改造二手电子价签,实现了一点有意思的功能,于是买了两个玩玩。他们用的是tsl0922开发的开源固件,具有日历、传图、文字功能,在网页端可以很方便地配置。 🪧引用站外地址,不保证站点的可用性和安全性 上位机 tsl0922 当然开源版固件功能有点少,又不想买烧录器自己折腾,所以把自己想要的功能写成网页:目前写了待办事项和倒计时,生成图片后上传 ✅来自本站,本站可确保其安全性,请放心点击跳转 生成图 tu
OpenGL- Cohen-Sutherland 编码裁剪算法
裁剪是从数据集合提取信息的过程,它是计算机图形学许多重要问题的基础。裁剪典型的用途就是从一个大的场景中提取所需的信息,以显示某一局部场景或视图。比如浏览地图时,对感兴趣的区域放大显示,此时窗口内显示的内容会相应减少。确定图形的哪些部分在窗口内,哪些部分在窗口外(不可见区域),只显示窗口内的那部分图形,这个选择处理过程就是裁剪。 Cohen-Sutherland编码裁剪算法算法思想1)若线段完全在窗口之内则显示该线段称为“取”,2)若线段明显在窗口之外则丢弃该线段称为“弃”3)若线段既不满足“取”的条件也不满足“弃”的条件则把线段分割为两段,对于完全在窗口之外的部分可弃之。 具体实现为快速判断一条直线段与矩形窗口的位置关系采用如图所示的空间划分和编码方案(四位二进制编码上下右左) 接下来是具体代码 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767...
OpenGL-直线的扫描转换
这篇文章来介绍直线扫描转换算法 DDA数值微分线段算法算法简介数值微分法即DDA法(Digital Differential Analyzer),是一种基于微分方程来生成直线的方法。在计算机图形学中,并没有线段的概念,而是一个个像素点组成了线段。 DDA法生成线段的步骤一般如下: 有了起始点($x_1,y_1$)和终点($x_n,y_n$); $$\Delta x =|x_n-x_1|, \Delta y=|y_n-y_1|$$ 比较$\Delta x$和$\Delta y$的大小; steps=$\Delta x$和$\Delta y$中较大者; $$step_x=\frac{\Delta x}{steps},step_y=\frac{\Delta y}{steps}$$ 算法实现DDA算法实现如下: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061...
OpenGL-基础程序
代码展示我们先从基本的OpenGL程序开始吧,这是一个简单的OpenGL程序: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include<GL/glut.h>using namespace std;// 回调函数void myDisplay(){ // 清除缓冲区 glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); // 正交模式 glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 500.0, 0.0, 500.0); glColor4f(0.0, 1.0, 0.0, 0.0); glRectf(50.0, 50.0, 400.0, 400.0); // 划线 glColor3f(1.0, 1.0, 0.0); glBegin(GL_LINES); glVertex2f(50.0, 50....
配置OpenGL环境
最近要学计算机图形学,所以会用到OpenGL,配置环境有点繁琐,记录了下来。 安装Visual Studio现在我们先来安装Visual Studio:visual studio,下载后安装即可|在安装时选择“使用C++的桌面开发”,这样安装时就会安装C++的编译器了。 安装 Cmake这个可选,因为我们可以使用Visual Studio的编译器MSVC来编译项目。Cmake是一个开源的跨平台软件构建工具,它可以生成不同系统的构建文件,比如Makefile,Ninja,VS项目文件等等。我们可以下载Cmake:cmake,下载后安装即可。 安装GLFWOpenGL有许多工具,比如GLFW,GLEW等等,这里我们安装GLFW。 工具 类别 主要职责 特点 GLUT 窗口管理 + 工具库 创建窗口、处理鼠标键盘、提供内置渲染循环。 古老、简单。使用“固定管线”(老旧技术),适合教学。 GLFW 窗口管理库 创建窗口、处理输入、管理多个上下文。 现代、轻量。只管窗口和输入,不负责渲染逻辑,是目前的主流。 GLAD 配置/加载库 加载 OpenGL 函数指针...
opencv应用-算术运算
opencv对图像的算数运算,感觉都大同小异,分为以下几种:加减乘除和位运算。 函数 功能 应用场景 cv2.bitwise_and() 按位与操作 掩码操作、图像分割 cv2.bitwise_or() 按位或操作 图像叠加 cv2.bitwise_not() 按位取反操作 图像反色 cv2.bitwise_xor() 按位异或操作 图像差异检测 因为感觉都差不多,所以只把加法运算代码搬过来 1234567891011121314151617181920212223242526272829303132333435363738394041// 加法#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){ string path1 = "../img/2.jpg"; string path2 = "../img/3.jpg"; ...
opencv应用-基础操作
这里用C++进行编程,发现菜鸟教程只有python的版本,那就记录一下。 图片读取与展示1234567891011121314// 读取图像#include<opencv2/opencv.hpp>#include<iostream>using namespace std;using namespace cv;int main(){ Mat src = imread("../img/1.png"); imshow("input",src); waitKey(0); destroyAllWindows(); return 0;} 图像基本操作读取像素需要用到三维向量数组Vect3b,这里需要注意的是,Opencv是BGR而不是我们常用的RGB。 123456789101112131415161718192021222324// 读取像素#include<opencv2/opencv.hpp>#include<iostream>using name...
配置opencv
引言不知道为什么我们专业看起来与计算机八竿子打不着,竟然要学opencv,那就来记录一下吧! Ubuntu 篇Ubuntu因为有完善的包管理体系,所以配环境相对简单。 先安装vscode,当然也可以不安装,只是个编辑器; 🪧引用站外地址,不保证站点的可用性和安全性 vscode Microsoft 到这里下载deb格式的软件包,然后dpkg安装即可。可以安装这些扩展: 接下来安装编译器 12345678910# 先更新软件包apt updateapt upgrade -y# 安装C/C++编译器apt install gcc g++# 安装opencvapt install -y mesa-utilsapt install -y libopencv-devapt install -y opencvapt install -y python3-opencv #Python opencv 然后就可以了。 Windows ...
自建bitwarden服务
Bitwarden 是一款开源、端到端加密的密码管理器,支持 Windows、macOS、Linux、Android、iOS 以及几乎所有主流浏览器。它可以帮你: 安全存储密码、银行卡、笔记、密钥等敏感信息 全设备自动同步 一键自动填充账号密码 生成高强度随机密码 检测弱密码、重复密码、泄露密码 之前一直使用浏览器自带的密码管理器,跨平台不太好用,所以自建一个Bitwarden服务器。但是我们一般用Vaultwarden,占用更小,有一些Bitwarden的商业功能。 123456789101112services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped environment: DOMAIN: "https://vw.domain.tld" #更改成自己的域名 volumes: - ./vw-data/:/data/ ports: ...
自建renovate-bot
最近自建了gitea,所以把renovatebot也自建一下,毕竟renovatebot可以自动更新依赖,但是它不对自建git提供服务。这是docker compose文件: 123456789101112services: renovate: image: renovate/renovate:latest environment: RENOVATE_PLATFORM: 'gitea' RENOVATE_ENDPOINT: '你的git api地址' RENOVATE_TOKEN: 'token' RENOVATE_AUTODISCOVER: 'true' RENOVATE_GIT_AUTHOR: Renovate Bot <bot@biss.click> RENOVATE_USERNAME: renovate-bot volumes: - ./renovate-data:/tmp/renovate ...







