当前位置: 首页 > news >正文

【OpenCV实战】2.OpenCV基本数据类型实战

OpenCV基本数据类型实战

    • 〇、实战内容
    • 1 OpenCV helloworld
        • 1.1 文件结构类型
        • 1.2 CMakeList.txt
        • 1.3 Helloworld
    • 2. Image的基本操作
    • 3. OpenCV 基本数据类型
    • 4. 读取图片的像素 & 遍历图片
        • 4.1 获取制定像素
        • 4.2 遍历图片
    • 5. 图片反色
        • 5.1 方法1 :遍历
        • 5.2 方法2 :矩阵减法
    • 6. 矩阵基本运算

〇、实战内容

  1. OpenCV helloworld
  2. Image的基本操作
  3. OpenCV 基本数据类型
  4. 遍历图片,读取图片的像素
  5. 图片反色
  6. 矩阵基本操作

1 OpenCV helloworld

1.1 文件结构类型

assign_1build [cmake build所用]assign_1.cppCMakeLists.txtimg.webp

图片地址

1.2 CMakeList.txt

cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
project(assign1)
find_package(OpenCV 3 REQUIRED HINTS /usr/local/opt/opencv@3) 
add_executable(assign1 assign_1.cpp)
target_link_libraries(assign1 ${OpenCV_LIBS})
  1. cmake 3.10版本
  2. 使用C++ 11
  3. project 名字为assign1
  4. find_package寻找opencv@3库

1.3 Helloworld

assign_1.cpp

#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <string>using namespace cv;
using namespace std;int main(int argc, char *argv[])
{Mat image = imread("/Users/..../computerphotography/course_zhengjiangdaxue/opencv-logo.png"); // 载入名为 "opencv-logo.png" 的图片namedWindow("hello");    // 创建一个标题为 "hello" 的窗口imshow("hello", result); // 在窗口 "hello" 中显示图片waitKey(0);              // 等待用户按下键盘destroyWindow("hello");  // 销毁窗口 "hello"return 0;
}

2. Image的基本操作

#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <string>
using namespace cv;
using namespace std;int main(int argc, char *argv[])
{Mat image = imread("/Users/..../computerphotography/course_zhengjiangdaxue/opencv-logo.png"); // 载入名为 "opencv-logo.png" 的图片cout << "image size 1: " << image.size() << endl;cout << "image 行数: " << image.rows << endl;cout << "image 列数: " << image.cols << endl;cout << "image 通道数: " << image.channels() << endl;cout << "image type: " << image.type() << endl;return 0;
}

输出结果

image size 1: [200 x 200]
image 行数: 200
image 列数: 200
image 通道数: 3
image type: 16

3. OpenCV 基本数据类型

int main(int argc, char *argv[])
{cout << "CV_8UC1:" << CV_8UC1 << endl;cout << "CV_8UC2:" << CV_8UC2 << endl;cout << "CV_8UC3:" << CV_8UC3 << endl;cout << "CV_8UC4:" << CV_8UC4 << endl;cout << "CV_8UC5:" << CV_8UC(5) << endl;cout << "CV_8SC1:" << CV_8SC1 << endl;cout << "CV_8SC2:" << CV_8SC2 << endl;cout << "CV_8SC3:" << CV_8SC3 << endl;cout << "CV_8SC4:" << CV_8SC4 << endl;cout << "CV_8SC5:" << CV_8SC(5) << endl;cout << "CV_16UC1:" << CV_16UC1 << endl;cout << "CV_16UC2:" << CV_16UC2 << endl;cout << "CV_16UC3:" << CV_16UC3 << endl;cout << "CV_16UC4:" << CV_16UC4 << endl;cout << "CV_16UC5:" << CV_16UC(5) << endl;cout << "CV_16SC1:" << CV_16SC1 << endl;cout << "CV_32SC1:" << CV_32SC1 << endl;cout << "CV_32FC1:" << CV_32FC1 << endl;cout << "CV_64FC1:" << CV_64FC1 << endl;
}

输出结果

CV_8UC1:0
CV_8UC2:8
CV_8UC3:16
CV_8UC4:24
CV_8UC5:32
CV_8SC1:1
CV_8SC2:9
CV_8SC3:17
CV_8SC4:25
CV_8SC5:33
CV_16UC1:2
CV_16UC2:10
CV_16UC3:18
CV_16UC4:26
CV_16UC5:34
CV_16SC1:3
CV_32SC1:4
CV_32FC1:5
CV_64FC1:6
  1. CV_8UC1 8字节无符号类型,通道为1
  2. CV_8UC3 8字节无符号类型,通道为3 即一个长度为3的数据例如[255,255,255] 三通道基本代表R, G, B
  3. image.type() == 16 == CV_8UC3 即改图片是3通道
  4. 单通道,增加一通道,值增加8
    CV_8UC1->0 -> uchar
    CV_8SC1->1 -> char
    CV_16UC1->2 -> ushort
    CV_16SC1->3 -> short
    CV_32SC1->4 -> int
    CV_32FC1->5 -> float
    CV_64FC1->6 -> double

4. 读取图片的像素 & 遍历图片

4.1 获取制定像素

int main(int argc, char *argv[])
{// 3. 获取某一个像素值cout << "image at 0: " << image.at<Vec3b>(0) << endl;cout << "image at 10000000: " << image.at<Vec3b>(10000000) << endl;cout << "image at 39999: " << image.at<Vec3b>(39999) << endl;cout << "image at 199,199: " << image.at<Vec3b>(199, 199) << endl;}

输出:

image at 0: [255, 255, 255]
image at 10000000: [0, 0, 0]
image at 39999: [255, 255, 255]
image at 199,199: [255, 255, 255]
  1. at方法
    a. 需要制定对应的类型,单通道见Section3 说明;二通道Vec2b Vec2i Vec2f Vec2d
    b. 参数可为1个,200 * 200 即 0<=index <=39999;参数为2个,则对应的行和列
  2. 超出索引也可获取值

4.2 遍历图片

int main(int argc, char *argv[])
{// //5. 遍历图片像素,方法1,便利,判断是白色,赋值为黑色for(int i = 0;i<image.rows;i++){for(int j=0;j<image.cols;j++){if(image.at<Vec3b>(i,j) == white){image.at<Vec3b>(i,j) = black;}}}}

5. 图片反色

5.1 方法1 :遍历

int main(int argc, char *argv[])
{Vec3b white(255, 255, 255);for(int i = 0;i<image.rows;i++){for(int j=0;j<image.cols;j++){image.at<Vec3b>(i,j) = white - image.at<Vec3b>(i,j);}}
}
  1. 定义白色Vec3b white(255, 255, 255);
  2. 遍历图片用white减去每个像素颜色

5.2 方法2 :矩阵减法

  Mat m(image.rows,image.cols,CV_8UC3,Scalar(255,255,255));image = m-image;
  1. Mat 代表opencv里的矩阵
  2. 初始化的时候传入行数,列数,每个像素的数据格式,以及初始值
    a. 如果CV_8UC1 就是Scalar(255)
    b. 如果CV_8UC2 就是Scalar(255, 255)
  3. 初始化了一个CV_8UC3, 和原始图片一样大的矩阵,然后做减法

6. 矩阵基本运算

int main(){Mat origin(10, 10, CV_32FC1, Scalar(0));for (int i = 0; i < 10; i++){for (int j = 0; j < 10; j++){if (i == j){cout << "i=" << i << "j=" << j << endl;origin.at<float>(i, j) = 2.0;}else if ((i == j - 1) || (i == j + 1)){origin.at<float>(i, j) = -1.0;}}}// 矩阵 的逆Mat invert = origin.inv();cout << "origin mat:"<<endl;print(origin);cout << endl<<"invert mat:"<<endl;print(invert);//矩阵加法cout << endl<< "add mat:"<<endl;origin = origin+invert;print(origin);//矩阵乘法cout << endl<< "multiply mat:"<<endl;origin = origin*invert;print(origin);//初始化对角线cout << endl<< "eye mat:"<<endl;Mat eye = Mat::eye(10,10,CV_32FC1);print(eye);cout << endl<< "normalize mat:"<<endl;Mat result;//归一化,最大的位白色,最小的为黑色normalize(invert, result, 1.0, 0.0, CV_MINMAX);// 现实窗口逻辑print(result);cout << endl;return 0;
}

输出结果:

origin mat:
[2, -1, 0, 0, 0, 0, 0, 0, 0, 0;-1, 2, -1, 0, 0, 0, 0, 0, 0, 0;0, -1, 2, -1, 0, 0, 0, 0, 0, 0;0, 0, -1, 2, -1, 0, 0, 0, 0, 0;0, 0, 0, -1, 2, -1, 0, 0, 0, 0;0, 0, 0, 0, -1, 2, -1, 0, 0, 0;0, 0, 0, 0, 0, -1, 2, -1, 0, 0;0, 0, 0, 0, 0, 0, -1, 2, -1, 0;0, 0, 0, 0, 0, 0, 0, -1, 2, -1;0, 0, 0, 0, 0, 0, 0, 0, -1, 2]
invert mat:
[0.90909088, 0.81818181, 0.72727281, 0.63636357, 0.54545444, 0.45454538, 0.36363626, 0.27272728, 0.18181814, 0.090909071;0.81818181, 1.6363636, 1.4545456, 1.2727271, 1.0909089, 0.90909076, 0.72727251, 0.54545456, 0.36363629, 0.18181814;0.72727281, 1.4545456, 2.1818185, 1.9090908, 1.6363634, 1.3636361, 1.0909088, 0.81818181, 0.54545444, 0.27272722;0.63636369, 1.2727274, 1.909091, 2.5454543, 2.1818178, 1.8181814, 1.4545449, 1.090909, 0.72727257, 0.36363629;0.54545456, 1.0909091, 1.6363636, 2.1818178, 2.7272723, 2.2727268, 1.8181812, 1.3636363, 0.9090907, 0.45454535;0.45454544, 0.90909088, 1.3636363, 1.8181814, 2.2727268, 2.7272723, 2.1818175, 1.6363635, 1.0909089, 0.54545444;0.36363637, 0.72727275, 1.090909, 1.4545451, 1.8181815, 2.1818178, 2.545454, 1.9090909, 1.2727271, 0.63636357;0.27272728, 0.54545456, 0.81818181, 1.0909089, 1.3636363, 1.6363634, 1.9090906, 2.1818182, 1.4545454, 0.72727269;0.18181817, 0.36363634, 0.54545456, 0.72727257, 0.90909082, 1.0909089, 1.2727271, 1.4545454, 1.6363635, 0.81818175;0.090909094, 0.18181819, 0.27272728, 0.36363631, 0.45454541, 0.54545444, 0.63636357, 0.72727275, 0.81818175, 0.90909088]
add mat:
[2.909091, -0.18181819, 0.72727281, 0.63636357, 0.54545444, 0.45454538, 0.36363626, 0.27272728, 0.18181814, 0.090909071;-0.18181819, 3.6363635, 0.45454562, 1.2727271, 1.0909089, 0.90909076, 0.72727251, 0.54545456, 0.36363629, 0.18181814;0.72727281, 0.45454562, 4.1818185, 0.90909076, 1.6363634, 1.3636361, 1.0909088, 0.81818181, 0.54545444, 0.27272722;0.63636369, 1.2727274, 0.909091, 4.545454, 1.1818178, 1.8181814, 1.4545449, 1.090909, 0.72727257, 0.36363629;0.54545456, 1.0909091, 1.6363636, 1.1818178, 4.727272, 1.2727268, 1.8181812, 1.3636363, 0.9090907, 0.45454535;0.45454544, 0.90909088, 1.3636363, 1.8181814, 1.2727268, 4.727272, 1.1818175, 1.6363635, 1.0909089, 0.54545444;0.36363637, 0.72727275, 1.090909, 1.4545451, 1.8181815, 1.1818178, 4.545454, 0.90909088, 1.2727271, 0.63636357;0.27272728, 0.54545456, 0.81818181, 1.0909089, 1.3636363, 1.6363634, 0.90909064, 4.181818, 0.45454538, 0.72727269;0.18181817, 0.36363634, 0.54545456, 0.72727257, 0.90909082, 1.0909089, 1.2727271, 0.45454538, 3.6363635, -0.18181825;0.090909094, 0.18181819, 0.27272728, 0.36363631, 0.45454541, 0.54545444, 0.63636357, 0.72727275, -0.18181825, 2.909091]
multiply mat:
[4.181818, 5.4545455, 6.909091, 7.6363621, 7.7272706, 7.2727251, 6.3636341, 5.0909085, 3.5454535, 1.8181813;5.454545, 11.090909, 13.090909, 14.63636, 14.909087, 14.090905, 12.363631, 9.9090891, 6.9090891, 3.5454535;6.9090915, 13.09091, 18.818182, 20.363632, 20.999994, 19.999994, 17.636356, 14.181816, 9.9090881, 5.0909076;7.636363, 14.636362, 20.363634, 25.18181, 25.454536, 24.545444, 21.818171, 17.63636, 12.363632, 6.3636341;7.727272, 14.909089, 20.999996, 25.454536, 28.727262, 27.272717, 24.545443, 19.999994, 14.090904, 7.2727246;7.2727261, 14.090907, 19.999996, 24.545444, 27.272717, 28.727262, 25.454533, 20.999994, 14.909085, 7.7272701;6.3636355, 12.363635, 17.636362, 21.818174, 24.545446, 25.454536, 25.181808, 20.363632, 14.63636, 7.6363616;5.090909, 9.90909, 14.181817, 17.636358, 19.999994, 20.999994, 20.36363, 18.81818, 13.090906, 6.9090896;3.5454543, 6.9090905, 9.90909, 12.363633, 14.090905, 14.909086, 14.636359, 13.090907, 11.090907, 5.4545441;1.8181818, 3.5454545, 5.090909, 6.3636351, 7.2727256, 7.7272706, 7.6363616, 6.9090905, 5.4545445, 4.181818]
eye mat:
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0;0, 1, 0, 0, 0, 0, 0, 0, 0, 0;0, 0, 1, 0, 0, 0, 0, 0, 0, 0;0, 0, 0, 1, 0, 0, 0, 0, 0, 0;0, 0, 0, 0, 1, 0, 0, 0, 0, 0;0, 0, 0, 0, 0, 1, 0, 0, 0, 0;0, 0, 0, 0, 0, 0, 1, 0, 0, 0;0, 0, 0, 0, 0, 0, 0, 1, 0, 0;0, 0, 0, 0, 0, 0, 0, 0, 1, 0;0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
normalize mat:
[0.31034487, 0.27586213, 0.24137938, 0.20689656, 0.17241378, 0.13793103, 0.10344826, 0.068965539, 0.034482758, 1.3546499e-09;0.27586213, 0.58620697, 0.51724154, 0.44827589, 0.37931034, 0.31034482, 0.24137928, 0.17241383, 0.10344827, 0.034482758;0.24137938, 0.51724154, 0.79310369, 0.68965524, 0.58620691, 0.48275861, 0.37931028, 0.27586213, 0.17241378, 0.068965517;0.2068966, 0.44827598, 0.6896553, 0.93103451, 0.7931034, 0.65517235, 0.51724124, 0.37931037, 0.24137929, 0.10344827;0.17241383, 0.37931043, 0.58620697, 0.7931034, 1, 0.82758617, 0.65517229, 0.48275867, 0.31034482, 0.13793102;0.13793106, 0.31034487, 0.48275867, 0.65517235, 0.82758617, 1, 0.79310334, 0.58620691, 0.37931034, 0.17241378;0.1034483, 0.24137937, 0.37931037, 0.51724136, 0.65517241, 0.7931034, 0.93103445, 0.68965524, 0.44827589, 0.20689656;0.068965539, 0.17241383, 0.27586213, 0.37931034, 0.48275867, 0.58620691, 0.68965518, 0.79310358, 0.51724142, 0.24137934;0.03448277, 0.10344829, 0.17241383, 0.24137929, 0.31034485, 0.37931034, 0.44827589, 0.51724142, 0.58620691, 0.2758621;9.8328981e-09, 0.034482773, 0.068965539, 0.10344828, 0.13793105, 0.17241378, 0.20689656, 0.24137937, 0.2758621, 0.31034487]
a123456@lucky build % 

相关文章:

【OpenCV实战】2.OpenCV基本数据类型实战

OpenCV基本数据类型实战 〇、实战内容1 OpenCV helloworld1.1 文件结构类型1.2 CMakeList.txt1.3 Helloworld 2. Image的基本操作3. OpenCV 基本数据类型4. 读取图片的像素 & 遍历图片4.1 获取制定像素4.2 遍历图片 5. 图片反色5.1 方法1 &#xff1a;遍历5.2 方法2 &#…...

MyBatis进阶:告别SQL注入!MyBatis分页与特殊字符的正确使用方式

目录 引言 一、使用正确的方式实现分页 1.1.什么是分页 1.2.MyBatis中的分页实现方式 1.3.避免SQL注入的技巧 二、特殊字符的正确使用方式 2.1.什么是特殊字符 2.2.特殊字符在SQL查询中的作用 2.3.如何避免特殊字符引起的问题 2.3.1.使用CDATA区段 2.3.2.使用实体引…...

安装Node(脚手架)

目录 一&#xff0c;安装node&#xff08;脚手架&#xff09;1.1&#xff0c; 配置vue.config.js1.2&#xff0c; vue-cli3x的目录介绍1.3&#xff0c; package.json 最后 一&#xff0c;安装node&#xff08;脚手架&#xff09; 从官网直接下载安装即可&#xff0c;自带npm包管…...

R语言10-R语言中的循环结构

在R语言中&#xff0c;有几种常用的循环结构&#xff0c;可以用来多次执行特定的代码块。以下是其中的两种主要循环结构&#xff1a; for循环&#xff1a; for 循环用于按照一定的步长迭代一个序列&#xff0c;通常用于执行固定次数的循环。 for (i in 1:5) {print(i) }while…...

【Spring】一次性打包学透 Spring | 阿Q送书第五期

文章目录 如何竭尽可能确保大家学透Spring1. 内容全面且细致2. 主题实用且本土化3. 案例系统且完善4. 知识有趣且深刻 关于作者丁雪丰业内专家推图书热卖留言提前获赠书 不知从何时开始&#xff0c;Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中&#xff0c;很…...

第 7 章 排序算法(4)(插入排序)

7.7插入排序 7.7.1插入排序法介绍: 插入式排序属于内部排序法&#xff0c;是对于欲排序的元素以插入的方式找寻该元素的适当位置&#xff0c;以达到排序的目的。 7.7.2插入排序法思想: 插入排序&#xff08;Insertion Sorting&#xff09;的基本思想是&#xff1a;把n个待排…...

JavsScript知识框架

JavaScript学习框架性总结 要系统性地精通 JavaScript&#xff0c;需要涵盖广泛的知识点&#xff0c;从基础到高级。以下是一些需要掌握的关键知识点&#xff08;当然不止这些&#xff09;&#xff1a; 基础语法和核心概念&#xff1a; 变量、数据类型、运算符作用域闭包this …...

el-input添加自定义指令只允许输入中文/英文/数字,兼容输入法事件

省流 script: directives: {regexp: {inserted: (el, binding, vnode) > {let composition falseconst formatValue function (e) {if (composition) return// vnode.componentInstance组件实例vnode.componentInstance.$emit(input, e.target.value.replace(/[^\u4e00-…...

0基础学习VR全景平台篇 第89篇:智慧眼-安放热点

一、功能说明 安放热点&#xff0c;是智慧眼成员们正式进入城市化管理的第一步&#xff0c;即发现问题后以安放热点的形式进行标记&#xff0c;再由其他的角色成员对该热点内容作出如核实、处理、确认完结等操作&#xff08;具体流程根据项目实际情况而定&#xff09;。 二、…...

java中用SXSSFWorkbook把多个list数据和单个实体dto导出到excel如何导出到多个sheet页详细实例?(亲测)

以下是一个详细的示例&#xff0c;展示了如何使用SXSSFWorkbook将多个List数据和单个实体DTO导出到多个Sheet页&#xff1a; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.S…...

SpringBoot 01 如何创建 和pom的解析

目录 1 Springboot的创建 步骤 2 项目的书写和运行 创建service包并在其下写一个service文件 项目的运行 pom文件的一些配置 parent web test 打包 打包过程 1 Springboot的创建 步骤 首先new一个新项目 然后依照如下创建 2 项目的书写和运行 创建service包并…...

axios详解

1.安装axios&#xff1a;npm install axios&#xff0c;等待安装完毕即可 2.引用axios&#xff1a;在需要使用的页面中引用 import axios from axios即可 get和post大同小异&#xff0c;一个是跟在url后面一个是跟在请求体里的 axios({method&#xff1a;"post/get&quo…...

Docker分布式仓库

Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器&#xff0c;由 vmware 开源&#xff0c;其通过添加一些企业必需的功能特性&#xff0c;例如安全、标识和管理等&#xff0c;扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器&#xff0c…...

SQL注入之万能用户名

文章目录 分析代码原理实现 分析代码 在安装的cms数据库目录C:\phpStudy\WWW\cms\admin下找到login.action.php文件&#xff0c;查看第20行&#xff0c;发现如下php代码&#xff1a; $user_row $db->getOneRow("select userid from cms_users where username "…...

ubuntu20搭建环境使用的一下指令

1.更新源 sudo vim etc/apt/sources.listdeb http://mirrors.aliyun.com/ubuntu/ xenial main deb-src http://mirrors.aliyun.com/ubuntu/ xenial maindeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates…...

GAN(生成对抗网络)

简介&#xff1a;GAN生成对抗网络本质上是一种思想&#xff0c;其依靠神经网络能够拟合任意函数的能力&#xff0c;设计了一种架构来实现数据的生成。 原理&#xff1a;GAN的原理就是最小化生成器Generator的损失&#xff0c;但是在最小化损失的过程中加入了一个约束&#xff0…...

实时同步ES技术选型:Mysql+Canal+Adapter+ES+Kibana

基于之前的文章&#xff0c;精简操作而来 让ELK在同一个docker网络下通过名字直接访问Ubuntu服务器ELK部署与实践使用 Docker 部署 canal 服务实现MySQL和ES实时同步Docker部署ES服务&#xff0c;canal全量同步的时候内存爆炸&#xff0c;ES/Canal Adapter自动关闭&#xff0c…...

禅道后台命令执行漏洞

漏洞简介 禅道是第一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体&#xff0c;是一款专业的研发项目管理软件&#xff0c;完整地覆盖了项目管理的核心流程。 禅道管理思想注重实效&#xff0c;功能完备丰富&#xff0c;…...

基于Spark+django的国漫推荐系统--计算机毕业设计项目

近年来&#xff0c;随着互联网的蓬勃发展&#xff0c;企事业单位对信息的管理提出了更高的要求。以传统的管理方式已无法满足现代人们的需求。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;随着各行业的不断发展&#xff0c;基…...

向量数据库 Milvus:实现高效向量搜索的技术解析

引言 随着人工智能、机器学习和深度学习技术的不断发展&#xff0c;越来越多的应用开始使用向量表示数据。向量数据具有高维、稀疏和相似性等特点&#xff0c;传统的关系型数据库和键值存储在处理这类数据时面临许多挑战。为了满足大规模、高并发的向量搜索需求&#xff0c;出现…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...