OpenCV 图像变换与处理实战
OpenCV快速通关
第一章:OpenCV 简介与环境搭建
第二章:OpenCV 图像基本操作
第三章:OpenCV 图像变换与处理实战
OpenCV 图像变换与处理实战
- OpenCV快速通关
- OpenCV 图像变换与处理实战
- 一、OpenCV 基础与图像处理概览
- 二、图像变换理论精析
- 三、图像增强与特征提取理论
- 三、实例分析
- 1. 定义常量 `M_PI`
- 2. 重映射图像创建波形效果
- 3. 缩放图像
- 4. 旋转图像
- 5. 颜色变换(灰度图)
- 6. 边缘检测
- 7. 高斯模糊
- 8. 图像锐化
- 9. 颜色反转
- 四、主函数实现
- 五、总结
OpenCV 图像变换与处理实战
在计算机视觉的绚丽舞台上,OpenCV 无疑是一颗耀眼的明星,它赋予开发者操控图像、挖掘视觉信息的超强能力。在正式深入那些令人惊叹的代码实例前,咱们先来夯实理论基础,为后续实操筑牢根基。
一、OpenCV 基础与图像处理概览
OpenCV(Open Source Computer Vision Library),开源计算机视觉库,犹如一座装满图像处理 “神器” 的百宝箱。历经多年迭代、无数开发者打磨,它横跨多平台,用 C++、Python 等热门语言编写接口,贴合不同编程习惯,揽下计算机视觉八成基础任务,从简单图像读取、存储,到复杂目标检测、图像识别,统统不在话下。
图像处理本质是对图像像素的精心雕琢。图像存于计算机里,像整齐排列的 “像素方阵”,每个像素怀揣颜色、亮度信息。咱做图像处理,就是巧妙改变这些像素属性。像调亮度,是给像素亮度值做加法;改颜色,是调配红、绿、蓝分量。手段不同,目的一致:让图像契合特定需求,或美轮美奂,或信息精准。
二、图像变换理论精析
(一)重映射(Remapping)
重映射堪称图像坐标的 “乾坤大挪移”。正常图像像素按行列规则站位,重映射打破常规,依自定义映射规则给像素 “搬家”。核心原理是新建两张和原图像同尺寸 “坐标图”(src_x、src_y),记录新位置,好比导游图,指引像素 “迁移” 方向。这操作实用性拉满,制造波浪、扭曲特效时大显身手,让画面瞬间灵动。
(二)缩放(Scaling)
缩放直白说就是给图像 “放大缩小”。数学上,按比例因子(scale_x、scale_y)改变行列像素数量,近的像素合并变小图,间隔插值变 “长胖” 成大图。插值算法是关键,常见线性插值(cv::INTER_LINEAR),像经验老到的裁缝,凭周边像素信息,算出新增像素 “恰当脸色”,保图像平滑过渡。
(三)旋转(Rotation)
旋转让图像优雅 “转身”。先锁定旋转中心,多为图像几何中心,再用旋转矩阵(由 cv::getRotationMatrix2D 生成)做 “旋转指令”。这矩阵蕴含旋转角度、缩放比例信息,结合仿射变换(cv::warpAffine),像素依指令乖乖就位,画面流畅旋动,毫无违和 “晕车感”。
三、图像增强与特征提取理论
(一)颜色变换(Color Conversion)
颜色空间多如繁星,常见 RGB、HSV、灰度等。RGB 重色彩呈现,HSV 便颜色调整,灰度则聚焦亮度信息,抛弃色彩冗余。像转灰度图,用 cv::cvtColor 一键 “褪色”,按人眼亮度感知规则,加权融合 RGB 值,提取关键亮度,利于后续处理,还能降数据量、提处理速度。
(二)边缘检测(Edge Detection)
边缘是图像 “骨架”,藏关键轮廓信息。边缘检测算法像敏锐侦探,紧盯像素灰度突变处。Canny 算法是王牌,设低、高双阈值,梯度超 “高线” 锁定边缘;在 “低线” 与 “高线” 间,看连接情况甄别;低过 “低线”,直接 pass。经非极大值抑制、双阈值筛选,精准揪出边缘,给目标识别、图像分割铺好路。
(三)高斯模糊(Gaussian Blur)
现实图像常带噪声,像老照片划痕、数码噪点。高斯模糊化身 “美颜磨皮师”,用高斯函数生成权重核,中心像素权重高、周边递减,加权平均周边像素值,模糊图像、柔化噪声,让画面细腻干净,为后续精准处理清障。
(四)图像锐化(Image Sharpening)
锐化是模糊 “克星”,找回图像丢失细节。原理是强化高频分量,弱化低频。靠特制卷积核(如文中 3x3 核)卷积图像,中心像素 “突出”,周边反向调节,反差凸显边缘细节,照片、扫描文档处理后清晰度飙升。
(五)颜色反转(Color Inversion)
颜色反转堪称图像 “镜像世界”,简单粗暴按位取反像素值。白变黑、黑变白,各颜色分量翻转,特定艺术创作、负片效果模拟时,轻松拿捏氛围感。
三、实例分析
1. 定义常量 M_PI
#ifndef M_PI
#define M_PI 3.14159265358979323846 // 如果未定义 M_PI,则手动定义
#endif
这段代码的目的是确保在编译过程中,如果 M_PI
常量未被定义,则手动定义它为圆周率的值。这在一些情况下是必要的,因为不同的编译器和环境可能对某些常量的定义有所不同。
2. 重映射图像创建波形效果
void wave(const cv::Mat& img, cv::Mat& res, const std::string& wave_type, double amplitude, double frequency) {cv::Mat src_x(img.rows, img.cols, CV_32F);cv::Mat src_y(img.rows, img.cols, CV_32F);for (int i = 0; i < img.rows; i++) {for (int j = 0; j < img.cols; j++) {src_x.at<float>(i, j) = static_cast<float>(j);double wave_value = 0.0;if (wave_type == "sine") {wave_value = amplitude * sin(frequency * static_cast<double>(j)); // 正弦波}else if (wave_type == "cosine") {wave_value = amplitude * cos(frequency * static_cast<double>(j)); // 余弦波}else if (wave_type == "triangle") {wave_value = amplitude * (2.0 / M_PI) * asin(sin(frequency * static_cast<double>(j))); // 三角波}else if (wave_type == "sawtooth") {wave_value = amplitude * (2.0 * (j / static_cast<double>(img.cols)) - 1.0); // 锯齿波}src_y.at<float>(i, j) = static_cast<float>(i + wave_value);}}cv::remap(img, res, src_x, src_y, cv::INTER_LINEAR);
}
这个函数用于创建不同类型的波形效果,通过重映射图像的像素坐标来实现。它接受输入图像 img
、输出图像 res
、波形类型 wave_type
、振幅 amplitude
和频率 frequency
作为参数。
首先,创建两个与输入图像大小相同的矩阵 src_x
和 src_y
,分别用于存储重映射后的 x 和 y 坐标。然后,通过双层循环遍历输入图像的每个像素。对于每个像素,将 src_x
中的对应值设置为当前像素的 x 坐标,并根据 wave_type
的不同计算出波形的值 wave_value
。最后,将 src_y
中的对应值设置为当前像素的 y 坐标加上波形值。
最后,使用 cv::remap
函数根据 src_x
和 src_y
矩阵对输入图像进行重映射,得到输出图像 res
。
3. 缩放图像
void scale(const cv::Mat& img, cv::Mat& res, double scale_x, double scale_y) {cv::resize(img, res, cv::Size(), scale_x, scale_y, cv::INTER_LINEAR);
}
这个函数用于缩放图像。它接受输入图像 img
、输出图像 res
、水平缩放比例 scale_x
和垂直缩放比例 scale_y
作为参数。
使用 cv::resize
函数对输入图像进行缩放,将输出图像的大小设置为输入图像的大小乘以缩放比例。这里使用 cv::INTER_LINEAR
插值方法,以获得较为平滑的缩放效果。
4. 旋转图像
void rotate1(const cv::Mat& img, cv::Mat& res, double angle) {cv::Point2f center(img.cols / 2.0, img.rows / 2.0);cv::Mat rot = cv::getRotationMatrix2D(center, angle, 1.0);cv::warpAffine(img, res, rot, img.size());
}
这个函数用于旋转图像。它接受输入图像 img
、输出图像 res
和旋转角度 angle
作为参数。
首先,计算图像的中心坐标。然后,使用 cv::getRotationMatrix2D
函数创建一个旋转矩阵 rot
,该矩阵将图像绕中心旋转指定的角度。最后,使用 cv::warpAffine
函数根据旋转矩阵对输入图像进行仿射变换,得到输出图像 res
。
5. 颜色变换(灰度图)
void grayscale(const cv::Mat& img, cv::Mat& res) {cv::cvtColor(img, res, cv::COLOR_BGR2GRAY);
}
这个函数用于将彩色图像转换为灰度图像。它接受输入图像 img
和输出图像 res
作为参数。
使用 cv::cvtColor
函数将输入图像从 BGR 颜色空间转换为灰度颜色空间,得到输出图像 res
。
6. 边缘检测
void edge_detection(const cv::Mat& img, cv::Mat& res) {cv::Canny(img, res, 100, 200);
}
这个函数用于进行边缘检测。它接受输入图像 img
和输出图像 res
作为参数。
使用 cv::Canny
函数对输入图像进行边缘检测,该函数接受输入图像、输出图像、低阈值和高阈值作为参数。边缘检测算法会根据像素的梯度强度来确定是否为边缘像素,如果像素的梯度强度大于高阈值,则被认为是边缘像素;如果像素的梯度强度小于低阈值,则被认为不是边缘像素;如果像素的梯度强度在低阈值和高阈值之间,则根据其与边缘像素的连接情况来确定是否为边缘像素。
7. 高斯模糊
void gaussian_blur(const cv::Mat& img, cv::Mat& res) {cv::GaussianBlur(img, res, cv::Size(5, 5), 0);
}
这个函数用于对图像进行高斯模糊处理。它接受输入图像 img
和输出图像 res
作为参数。
使用 cv::GaussianBlur
函数对输入图像进行高斯模糊,该函数接受输入图像、输出图像、模糊核大小和标准差作为参数。这里使用的模糊核大小为 cv::Size(5, 5)
,标准差为 0,表示由函数自动计算标准差。
8. 图像锐化
void sharpen(const cv::Mat& img, cv::Mat& res) {cv::Mat kernel = (cv::Mat_<float>(3, 3) <<0, -1, 0,-1, 5, -1,0, -1, 0);cv::filter2D(img, res, img.depth(), kernel);
}
这个函数用于对图像进行锐化处理。它接受输入图像 img
和输出图像 res
作为参数。
首先,定义一个 3x3 的锐化内核 kernel
。然后,使用 cv::filter2D
函数对输入图像进行卷积操作,该函数接受输入图像、输出图像、图像深度和卷积内核作为参数。这里将输入图像与锐化内核进行卷积,得到输出图像 res
,从而实现图像锐化的效果。
9. 颜色反转
void invert_colors(const cv::Mat& img, cv::Mat& res) {cv::bitwise_not(img, res);
}
这个函数用于对图像进行颜色反转处理。它接受输入图像 img
和输出图像 res
作为参数。
使用 cv::bitwise_not
函数对输入图像进行按位取反操作,即将每个像素的颜色值取反,得到输出图像 res
。
四、主函数实现
int main() {cv::Mat img = cv::imread("E:/pro/sdl_code/res/test_img.png");if (img.empty()) {std::cerr << "Error: Image not found." << std::endl;return -1;}cv::Mat sine_wave_img, cosine_wave_img, triangle_wave_img, sawtooth_wave_img, scale_img, rotate_img, gray_img, edge_img, blur_img, sharp_img, invert_img;// 不同波形效果wave(img, sine_wave_img, "sine", 20, 0.1); // 正弦波wave(img, cosine_wave_img, "cosine", 20, 0.1); // 余弦波wave(img, triangle_wave_img, "triangle", 20, 0.1); // 三角波wave(img, sawtooth_wave_img, "sawtooth", 20, 10); // 锯齿波// 缩放图像scale(img, scale_img, 0.5, 0.5);// 旋转图像rotate1(img, rotate_img, 45);// 颜色变换(灰度图)grayscale(img, gray_img);// 边缘检测edge_detection(img, edge_img);// 高斯模糊gaussian_blur(img, blur_img);// 图像锐化sharpen(img, sharp_img);// 颜色反转invert_colors(img, invert_img);// 显示所有效果cv::imshow("Original Image", img);cv::imshow("Sine Wave Effect", sine_wave_img);cv::imshow("Cosine Wave Effect", cosine_wave_img);cv::imshow("Triangle Wave Effect", triangle_wave_img);cv::imshow("Sawtooth Wave Effect", sawtooth_wave_img);cv::imshow("Scaled Image", scale_img);cv::imshow("Rotated Image", rotate_img);cv::imshow("Grayscale Image", gray_img);cv::imshow("Edge Detection", edge_img);cv::imshow("Gaussian Blur", blur_img);cv::imshow("Sharpened Image", sharp_img);cv::imshow("Inverted Colors", invert_img);cv::waitKey(0);// 保存结果图像//cv::imwrite("output_wave_image.jpg", wave_img);//cv::imwrite("output_scaled_image.jpg", scale_img);//cv::imwrite("output_rotated_image.jpg", rotate_img);//cv::imwrite("output_grayscale_image.jpg", gray_img);//cv::imwrite("output_edge_detection.jpg", edge_img);//cv::imwrite("output_gaussian_blur.jpg", blur_img);//cv::imwrite("output_sharpened_image.jpg", sharp_img);//cv::imwrite("output_inverted_colors.jpg", invert_img);return 0;
}
主函数首先读取输入图像,如果图像读取失败,则输出错误信息并返回 -1。然后,创建多个输出图像用于存储不同的处理效果。接下来,分别调用不同的函数对输入图像进行处理,得到各种效果的输出图像。最后,显示所有的图像,并等待用户按下任意键退出程序。如果需要保存结果图像,可以取消注释相应的代码行。
五、总结
本文介绍了如何使用 OpenCV 实现多种图像变换和处理效果,包括重映射图像创建波形效果、缩放图像、旋转图像、颜色变换、边缘检测、高斯模糊、图像锐化和颜色反转等。通过这些功能,我们可以对图像进行各种操作,从而实现不同的视觉效果。在实际应用中,可以根据具体需求选择合适的图像变换和处理方法,以达到更好的效果。
希望本文对大家学习和使用 OpenCV 有所帮助。如果有任何问题或建议,欢迎在评论区留言。首先介绍了 OpenCV 的重要性和本文要展示的内容。接着进行环境准备的说明,包括安装 OpenCV 和 C++编译器。然后对关键代码进行详细分析,分别解释了定义常量 M_PI
、各种图像变换和处理函数的作用及实现原理。最后展示了主函数的实现,包括读取图像、创建输出图像、调用各种处理函数、显示图像和等待用户操作等。整体文章结构清晰,按照介绍、准备、分析、实现和总结的顺序进行撰写,以帮助读者更好地理解 OpenCV 的图像变换和处理功能。
相关文章:
OpenCV 图像变换与处理实战
OpenCV快速通关 第一章:OpenCV 简介与环境搭建 第二章:OpenCV 图像基本操作 第三章:OpenCV 图像变换与处理实战 OpenCV 图像变换与处理实战 OpenCV快速通关OpenCV 图像变换与处理实战一、OpenCV 基础与图像处理概览二、图像变换理论精析三、…...
meta llama 大模型一个基础语言模型的集合
LLaMA 是一个基础语言模型的集合,参数范围从 7B 到 65B。我们在数万亿个 Token 上训练我们的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而无需诉诸专有的和无法访问的数据集。特别是,LLaMA-13B 在大多数基准测试…...
【MySQL — 数据库基础】深入理解数据库服务与数据库关系、MySQL连接创建、客户端工具及架构解析
目录 1. 数据库服务&数据库&表之间的关系 1.1 复习 my.ini 1.2 MYSQL服务基于mysqld启动而启动 1.3 数据库服务的具体含义 1.4 数据库服务&数据库&表之间的关系 2. 客户端工具 2.1 客户端连接MySQL服务器 2.2 客…...
详解多租户架构下的资源隔离模式
文章目录 0.简介1.多租户概念1.1 基本概念1.2 单租户 vs 多租户 2.实现方案2.1 独立数据库方案2.1.1 优点2.1.2 缺点2.1.3 应用场景 2.2 共享数据库,独立 Schema2.2.1 优点2.2.2 缺点2.2.3 应用场景 2.3 共享数据库、共享Schema、共享表2.3.1 优点2.3.2 缺点2.3.3 应…...
Bananna Pi开源社区联合矽昌通信打造开源的低成本Wifi5路由器
香蕉派 BPI-Wifi5 路由器采用矽昌SF19A2890S2芯片方案设计。它是一款高性能无线路由器,适用于小微企业、家庭和其他网络环境。Banana Pi开源社区提供整体解决方案。所有代码开源,用户可以在上面自由开发自己的应用。 Banana Pi wifi5 路由器github代码: …...
根据契约进行分析--录像店案例研究01
Richard Mitchell 著,zhen_lei 译 本文包括录像店案例研究的一些片段,用来说明根据契约进行分析的原理。本文假定读者已经从其它渠道学习了一些关于根据契约进行分析的方法。 完整的一套模型可以写成一本书。这些选择的片段用来说明开发的某些方面&…...
Linux系统操作03|chmod、vim
上文: Linux系统操作02|基本命令-CSDN博客 目录 六、chmod:给文件设置权限 1、字母法 2、数字法(用的最多) 七、vim:代码编写和文本编辑 1、启动和退出 1️⃣启动 2️⃣退出 2、vim基本操作 六、chmod&#x…...
MyBatis 核心知识与实践
一、MyBatis 概述 1. 框架简介 MyBatis 是一款支持自定义 SQL、存储过程以及高级映射的持久层框架。它避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的操作,使开发人员能够更专注于 SQL 语句的编写和业务逻辑的处理。 2. 核心组件 SqlSessionFactoryB…...
负载均衡oj项目:介绍
目录 项目介绍 项目演示 项目介绍 负载均衡oj是一个基于bs模式的项目。 用户使用浏览器向oj模块提交代码,oj模块会在所有在线的后端主机中选择一个负载情况最低的主机,将用户的代码提交给该主机,该主机进行编译运行,将结果返回…...
Oracle最佳实践-优化硬解析
前段时间参加oracle CAB,oracle高级服务部门做了一个数据库最佳实践的报告,其中就有一项就是解决未使用绑定变量但执行次数很多的SQL; 对于一个数据库来说如果不知道该如何优化,那么最简单最有效的优化就是减少硬解析,…...
Java 实现给pdf文件指定位置盖章功能
Java 实现给pdf文件指定位置盖章功能 开发中遇到一个需求, 需要给用户上传的的pdf文件, 指定位置上盖公章的功能, 经过调研和对比, 最终确定实现思路. 这里是使用pdf文件中的关键字进行章子的定位, 之所以这样考虑是因为如果直接写死坐标的话, 可能会出现因pdf大小, 缩放, 盖章…...
前端通过 jspdf 和 html2canvas 工具将网页生成 pdf
由于 html2canvas 的性能问题,该方案对于页数比较多的场景生成的非常慢,可以试着使用 modern-screenshot 工具看是否性能会得到提升。 import html2canvas from html2canvas import { jsPDF } from jspdfasync function exportPdf(){const pages docume…...
网络安全—部署CA证书服务器
网络拓扑 两台服务器在同一网段即可,即能够互相ping通。 安装步骤 安装证书系统 首先我们对计算机名进行确认,安装了证书系统后我们是不能随意更改计算机名字的,因为以后颁发的证书都是和计算机也就是这一台的服务器名字有关。 修改完成后开…...
用Keytool和OpenSSL生成和签发数字证书
一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书 J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密钥、证书和证书链。Keytool工具的命令在JavaSE6中已经改变,不过以前的命令仍然支持。Keytool也可以用来管理对称加密算法中…...
《CSS 知识点》大屏卡片布局思路:弹性布局 flex-grow
思路 大屏左右两侧高宽一致,内部卡片可按比例设置! 使用弹性布局和属性 flex-grow 设置比例;间隔使用 margin-bottom 设置,最后一个卡片不设置; 效果如图 代码说明 CSS代码 26 - 30,左右两侧设置弹性布…...
ceph单节点部署方式
准备一台单节点虚拟机,2C4G 三个50G的SCSi类型的磁盘 0. 关闭防火墙/关闭SELinux/下载podman/配置时间同步 systemctl disable --now firewalld setenforce 0 vim /etc/sysconfig/selinux SELINUXenforcing 修改为 SELINUXdisabled yum install podman -y sed -…...
【人工智能】OpenAI O1模型:超越GPT-4的长上下文RAG性能详解与优化指南
在人工智能(AI)领域,长上下文生成与检索(RAG) 已成为提升自然语言处理(NLP)模型性能的关键技术之一。随着数据规模与应用场景的不断扩展,如何高效地处理海量上下文信息,成…...
Qt如何将字串显示成二维码以供扫码识别
在Qt中可以使用QRcode来生成二维码,本质上说,其实是把一串信息生成二维码形式的图片。 首先介绍下QRcode,QRCode原本是一个用于生成二维码的 JavaScript 库,在Qt中大佬们将其改成C语言实现。现直接放出来,使用的时候直…...
【Golang】如何读取并解析SQL文件
一、背景 在数据库开发与维护过程中,我们经常需要执行大量的SQL语句。有时,这些SQL语句会被保存在一个文件中,以便于批量执行。为了方便地在Go语言中处理这些SQL文件,我们可以编写一个函数来读取并解析SQL文件中的语句。 二、实…...
图形学笔记 - 5. 光线追踪 - RayTracing
Whitted-Style Ray tracing 为什么要光线追踪 光栅化不能很好地处理全局效果 软阴影尤其是当光线反射不止一次的时候 栅格化速度很快,但质量相对较低 光线追踪是准确的,但速度很慢 光栅化:实时,光线追踪:离线~10K …...
WHY - 为什么选择 Rsbuild
目录 一、介绍二、工具对比三、性能 https://rsbuild.dev/zh/guide/start/index 一、介绍 Rsbuild 是由 Rspack 驱动的高性能构建工具,它默认包含了一套精心设计的构建配置,提供开箱即用的开发体验,并能够充分发挥出 Rspack 的性能优势。 二…...
前端(模块化)
未使用模块化 定义两个js文件simple1.js和simple2.js let a11; let a11; 两个js文件变量重名 在html测试 传统引入js文件 <script src"./simple1.js"></script> <script src"./simple2.js"></script> 浏览器报错 使用模块…...
Elasticsearch:Mapping-映射
一、创建索引 自动生成索引字段数据类型即自动映射 创建之前,先删除索引防止重复创建 删除索引: DELETE product_mapping创建索引 product_mapping并且赋值 PUT /product_mapping/_doc/1 {"name": "xiaomi phone","desc": "s…...
掘金电影市场的新机遇:开发特惠电影票小程序api文档
随着电影市场的不断扩大,特惠电影票小程序成为创业者和企业争相布局的新蓝海。本文将带你深入了解特惠电影票小程序的开发要点,以及如何通过这个项目实现盈利。 项目背景及市场分析 电影市场规模的不断扩大为特惠电影票小程序提供了广阔的市场空间。 根…...
EFAK kafka可视化管理工具部署使用
简介:EFAK是开源的可视化和管理软件。它允许您查询、可视化、提醒和探索您的指标,无论它们存储在何处。简单来说,它为您提供了将 Kafka 集群数据转换为漂亮的图形和可视化效果的工具。 环境:①操作系统:CentOS7.6&…...
---mysql server: Ubuntu Linux下最最基本的操作
作为开发人员你不需要做复杂的mysql server的各种维护操作, 只是想在本机或虚拟机做个server,然后整测试性数据库. 下面我给出最最简单的基本操作: Ubuntu安装完mysql server, 并且后,可以做如下基本操作,就表示可以了 你可以在这个基…...
Ariba Procurement: Administration_Master data
采购主数据集成Procurement Master Data Integration 注意:并非所有元素都是必需的,数据元素的名称可能根据ERP的不同,有所不同。 Types of Master Data Accounting 在SAP Ariba中的各种会计元素字段中,填充有效值选择列表。建…...
Not using native diff for overlay2, this may cause degraded performance……
问题现象 案例:Anolis 8.9(4.19.91-26.an8.x86_64) Overlay2存储驱动程序) 当我们安装好Docker之后,通过systemctl status docker -l 会发现有一个告警信息:levelwarning msg"Not using native dif…...
【自然语言处理与大模型】使用llama.cpp将HF格式大模型转换为GGUF格式
llama.cpp的主要目标是在本地和云端的各种硬件上以最小的设置和最先进的性能实现LLM推理。是一个专为大型语言模型(LLM)设计的高性能推理框架,完全使用C和C编写,没有外部依赖,这使得它可以很容易地被移植到不同的操作系…...
item2 for macos
安装Item2 brew install iterm2 查看终端类型 cat /etc/shells Mac OS X 10.15 已经将默认的shell从Bash换成了zsh,所以不用安装,10.15以前的可以使用下面的命令进行安装 brew install zsh 安装Oh My ZSH # curl sh -c "$(curl -fsSL https://ra…...
docker命令
目录 docker buildwgetdocker rundocker compose为什么docker compose比docker build 和run快很多? docker build docker build -t mineru:latestdocker build 命令是 Docker 的核心命令之一,用于从 Dockerfile 构建新的 Docker 镜像。 docker build&am…...
OrangePi Zero2 驱动开发
目录 一. 芯片手册 1. 资料下载地址 2. 阅读芯片手册 2.1 GPIO 寄存器的基地址是 (0x0300B000) 2.2 PC_CFG0 寄存器的偏移量(0x0048) 2.3 PC_CFG1 的偏移量(0x004C) 2.4 PC_CFG2 的偏移量(0x0050) 2.5 PC_DAT寄存器的偏移量(0x0058) 二. 驱动代码调试 2.1 …...
C/C++字符数组与字符串操作
C/C字符数组与字符串操作 录入 字符 scanf("%c",&字符变量); 字符变量 getchar(); #include <stdio.h> int main() {char ch;while ((ch getchar()) ! EOF) {putchar(ch);}return 0; }上述程序会在文件结尾后结束循环,在命令行中运行&#…...
动手学深度学习---线性神经网络
一、线性回归 解析解:模型的解可以用一个公式简单的表示,这类解叫做解析解。 超参数:可以调整但不在训练过程中更新的参数称为超参数。调参是选择超参数的过程。超参数通常是我们根据训练迭代结果来调整的。 在无法得到解析解的情况下…...
24计算机考研,东南大学和电子科技大学如何选择?
针对题主的情况,更推荐成电。成电上岸更为简单,就业前景也非常不错,性价比相当高。如果基础很扎实、更注重学校牌子、或是未来想在江浙沪发展的同学,东南大学是个很好的选择。下面就从学校综合实力、招录情况、考试难度来详细对比…...
Redis应用-在用户数据里的应用
1.社区电商的业务闭环 接下来介绍的社区电商是以Redis作为主体技术、以MySQL和RocketMQ作为辅助技术实现的。 (1)社区电商运作模式 社区电商的关键点在于社区,而电商则是辅助性质(次要地位,流量变现)。社区可以分成很多种社区,比如美食社区、美妆社区、影评社区、妈妈社区…...
STL容器-map P3613【深基15.例2】寄包柜 普及-
题目来源:洛谷题库 文章目录 map例题map知识点map使用注意:map的常用用法 map例题 P3613【深基15.例2】寄包柜 普及- 题意 根据数据插入/查询 思路 map键值对可以根据柜子编号查找物品,但是柜子又有很多个,考虑数组或者map数组…...
excel使用笔记
1.工作表1计算工作表2某列的和 假设我们有两个工作表,分别命名为“Sheet1”和“Sheet2”,我们想要求和这两个工作表中A1到A**单元格的数据,可以在任意一个工作表的单元格中输入以下公式: SUM(Sheet1!A1:A10, Sheet2!A1:A10) SUM…...
EasyGBS点对点穿透P2P远程访问技术在安防视频监控中的应用
随着信息技术的快速发展,安防视频监控系统在公共安全领域的应用变得越来越广泛。传统的视频监控系统多依赖于中心服务器进行视频流的集中处理和分发,这不仅增加了网络带宽的负担,还可能成为系统性能瓶颈。为了解决这些问题,P2P&am…...
【MySQL中多表查询和函数】
目录 1.多表查询 1.1 外键 1.2 链接查询 2.MySQL函数 内置函数简介 数值函数 字符串函数 时间日期函数 条件判断操作 开窗函数 1.多表查询 本质:把多个表通过主外键关联关系链接(join)合并成一个大表,在去单表查询操作…...
Polars数据聚合与旋转实战教程
在这篇博文中,我们的目标是解决数据爱好者提出的一个常见问题:如何有效地从Polars DataFrame中创建汇总视图,以便在不同时间段或类别之间轻松进行比较。我们将使用一个实际的数据集示例来探索实现这一目标的各种方法。 Polars简介 Polars 是…...
SpringBoot【十三(准备篇)】集成在线接口文档Swagger2
一、前言🔥 环境说明:Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 二、swagger介绍 我就不卖关子啦,相信在座的各位很多都已经用过,但是没关系,只要全世界还有一个没用过,我都会给他讲。 那…...
CKA认证 | Day6 K8s网络
第六章 Kubernetes网络 1、Service 控制器 在 Kubernetes (K8S) 中,Service 控制器 是一个关键组件,负责管理 Kubernetes 服务的生命周期和实现其功能。Service 控制器确保服务能够正确地将流量路由到后端 Pod,并处理服务的负载均衡和 DNS …...
基于Llamaindex的网页内容爬取实战
目的 本文不关注如何解析网页 html 元素和各种 python 爬虫技术,仅作为一种网页数据的预处理手段进行研究。Llamaindex 也并不是爬虫技术的集大成者,使用它是为了后续的存查一体化。 安装依赖 pip install llama-index-readers-web # pip install llam…...
springboot429校运会管理系统(论文+源码)_kaic
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装校运会管理系统软件来发挥其高效地信息处理的作用ÿ…...
tcpdump编译
https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz tar -zxvf flex-2.6.4.tar.gz ./configure CFLAGS-D_GNU_SOURCE make sudo make installwget http://ftp.gnu.org/gnu/bison/bison-3.2.1.tar.gz ./configure make sudo make install以上两个库是…...
Vite快速构建Vue教程
步骤 1: 初始化项目目录 创建一个名为 projects 的文件夹,作为存放所有 Vite 项目的根目录。这个文件夹将容纳多个独立的 Vite 项目。 步骤 2: 创建 Vite 项目 右键点击 projects 文件夹并选择“在此处打开终端”或使用您偏好的代码编辑器(如 VSCode&…...
四、个人项目系统搭建
文章目录 一、python写的后端代码二、html代码三、index.css四、js代码 效果图: 一、python写的后端代码 后端代码使用Flask编写,如下所示: # app.py from flask import Flask, render_template, request, jsonify, g import sqlite3 import…...
长沙理工大学《2024年825自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《长沙理工大学825自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题...
Linux上安装Anaconda
查看版本 lsb_release -a uname -m x86_64:表示系统是64位。i686、i386:表示系统是32位。 到连接安装对应版本 连接到ldhttps://repo.anaconda.com/archive/ 配置对应的conda环境,export PATH/对应目录/anaconda3/bin:$PATH *注意为bi…...