自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(177)
  • 收藏
  • 关注

原创 FTP云盘项目

本文介绍了一个基于Linux网络编程实现的FTP服务器系统,包含服务端和客户端组件。系统采用socket通信实现文件传输功能,支持远程文件浏览(ls/lls)、目录切换(cd/lcd)、文件上传下载(put/get)等操作。文章详细阐述了客户端和服务端的搭建过程:客户端通过socket创建连接、解析指令并执行相应操作;服务端则实现端口绑定、监听请求等功能。系统通过change()和choosecmd()函数识别并执行用户指令,使用strcmp/strstr进行指令匹配,采用popen执行系统命令。该FTP服

2025-08-18 12:06:35 950

原创 数据结构——树

树(Tree)是n(n≥0)个节点的有限集合T,它满足两个条件 :有且仅有一个特定的称为根(Root)的节点;其余的节点可以分为m(m≥0)个互不相交的有限集合T1、T2、……、Tm,其中每一个集合又是一棵树,并称为其根的子树树形表示法目录表示法。一个节点的子树的个数称为该节点的度数一棵树的度数是指该树中节点的最大度数。度数为零的节点称为树叶或终端节点度数不为零的节点称为分支节点除根节点外的分支节点称为内部节点。

2025-07-06 16:44:12 982

原创 数据结构——栈与队列的应用(球钟问题)

摘要:球钟是一种利用球的移动记录时间的装置,包含分钟(4球)、五分钟(11球)和小时(11球)三个栈。当队列出球时,依次判断各栈是否已满,满则清空栈球回队列。初始队列有27个球,三个栈为空。通过循环模拟球的移动过程,计算队列恢复原始顺序所需时间。代码实现使用链队列和顺序栈结构,通过出队入栈和出栈入队操作,最终输出恢复原始顺序的总分钟数。程序核心在于检查队列是否恢复升序排列,若满足则终止循环并输出结果。

2025-07-04 12:33:08 453

原创 数据结构——队列

本文介绍了队列的两种实现方式:顺序队列和链式队列。顺序队列采用数组存储,通过循环队列结构实现,重点解决了空队与满队的判断问题(留一个空位作为区分)。链式队列采用链表结构,通过头尾指针管理入队出队操作。文章详细讲解了两种队列的创建、入队、出队、判空、清空和释放内存等核心操作的实现代码,并展示了测试用例。两种队列都遵循先进先出(FIFO)原则,但链式队列在动态内存管理方面更为灵活,而顺序队列在内存使用效率上更优。

2025-07-04 09:37:31 1162

原创 数据结构——栈

本文介绍了栈的基本概念和两种实现方式。栈是一种后进先出(LIFO)的线性表,只能在栈顶进行插入和删除操作。文章详细阐述了顺序栈的实现,包括创建栈、入栈、出栈、清空栈和释放栈空间等操作的具体代码实现,并说明了内存管理的关键点。此外还简要介绍了链式栈的实现方式,对比了它与顺序栈在出栈操作上的区别。文章通过代码片段展示了栈的各种基本操作,包括结构体定义、初始化、内存申请与释放等核心流程。

2025-07-02 12:09:02 857

原创 冒泡排序的用法

摘要:本文介绍了使用C语言实现书籍按价格升序排序的方法。通过动态分配内存存储书名和价格,采用冒泡排序算法对价格进行排序,并同步交换书名和价格的位置。关键点包括:1)使用char**动态分配字符串数组;2)冒泡排序的双重循环结构;3)交换时同时处理书名和价格;4)最后释放所有动态分配的内存。示例代码完整展示了从输入、排序到输出的全过程,适用于处理可变数量的书籍数据排序需求。(135字)

2025-07-02 08:20:42 332

原创 数据结构——单链表反转、相邻节点最大值、有序链表合并

本文介绍了三种链表操作算法:1.单链表反转:通过头插法实现,需处理空链表和单节点特殊情况。2.求相邻节点最大值:使用快慢指针遍历链表,记录相邻节点和的最大值及其位置,需处理链表长度不足的情况。3.有序链表合并:比较两个链表节点值,将较小值节点依次插入新链表,最后处理剩余节点。每种算法都包含特殊情况处理和详细实现步骤,代码示例展示了完整的操作流程。

2025-07-01 12:08:51 514

原创 数据结构——线性表的链式存储

如图中的listnode A 它的存储位置是在栈上,用A去访问结构体的data是A.data=value;用p则是还有一种是存放在推上的,如下。

2025-07-01 09:43:02 630

原创 数据结构知识(线性表顺序存储)

本文介绍了数据结构的基本概念和线性表的顺序存储实现。主要内容包括:1) 数据结构的定义及逻辑结构(集合、线性、树形、图状)与存储结构(顺序、链式、索引、散列);2) 线性表的顺序存储特点及实现方法,通过sqlist.h、sqlist.c和test.c三个文件构建;3) 详细讲解了顺序表的基本操作实现,包括创建链表、插入/删除元素、查找、合并等功能的代码实现原理;4) 重点分析了删除重复元素的算法,采用双重循环和位置标记的方法高效处理。文章通过具体代码示例展示了顺序表从创建到各种操作的完整实现过程。

2025-06-30 08:24:47 926

原创 链表添加节点

题目要求将数组转换为链表并在指定位置插入新节点。首先用动态数组接收输入数据,然后采用尾插法构建链表。接着遍历到第i个节点位置,创建新节点(值为i)并插入其后。最后输出修改后的链表并释放内存。示例输入5 3 [5,4,8,6,3],输出链表5→4→8→3→6→3。关键步骤包括:数组转链表、节点定位与插入、内存管理。该算法时间复杂度为O(n),空间复杂度O(n)。(150字)

2025-06-30 08:23:49 391

原创 Make与Makefile

PHONY:clean 是生成一个为目标文件,防止出现问题的。

2025-06-28 08:46:39 196

原创 C语言高级编程

本文介绍了C语言编程中的几个核心知识点:1) GCC编译器的基本使用和调试方法;2) 条件编译的语法规则;3) 结构体的定义、使用及内存对齐问题;4) 结构体数组和指针的用法;5) 共用体特性;6) typedef重命名技巧;7) 动态内存管理。重点解析了结构体的字节对齐机制(如18字节结构体实际占用20字节)、结构体指针的内存分配注意事项(避免段错误)以及堆内存的正确使用方法(malloc/free操作)。这些内容涵盖了C语言编程中数据结构处理和内存管理的关键技术。

2025-06-27 15:28:23 621

原创 Shell脚本

本文简要介绍了Shell脚本编程的基础知识,包括Shell语言特点、编写执行流程、变量分类及使用、主要控制语句和函数等内容。Shell是解释型语言,通过.sh文件编写,需赋予执行权限后运行。变量分为用户自定义、位置、预定义和环境变量四类。文章讲解了if、case、for、while等流程控制语句的语法,以及函数定义和参数传递方法。最后提供了更详细讲解的优快云文章链接,适合初学者快速了解Shell编程基础。

2025-06-27 09:59:37 752

原创 从零学习linux(2)——管理

用户名、口令、用户ID(UID)、用户主目录(HOME)、用户shell。

2025-06-24 20:28:07 542

原创 从零学Linux(1)——软件包管理与shell编程

shell是一个命令行解释器Linux中的shell就是linux内核的一个外层保护工具,并负责用户与内核之间的交互。

2025-06-22 10:55:56 618

原创 ROCKX+RV1126检测人脸并进行拍照

获取每一帧VI模块的数据,并把每一帧VI模块的缓冲区和长度传输给rockx_image_t。具体的代码是rv1126_rockx_image.data = (uint8_t *)RK_MPI_MB_GetPtr(mb)(把每一帧VI缓冲区数据赋值到rockx_image_t的data)、rv1126_rockx_image.size = RK_MPI_MB_GetSize(mb)(把每一帧VI大小赋值到rockx_image_t的size),cols的长度是width,通道数是单通道(

2025-06-22 10:15:44 1017

原创 尾插法与头插法

牛牛从键盘输入一个长度为 n 的数组,问你能否用这个数组组成一个链表,并顺序输出链表每个节点的值。输入描述:第一行输入一个正整数 n ,表示数组的长度输出描述:制作一个链表然后输出这个链表的值示例1输入:4 5 4 2 1复制输出:5 4 2 1复制说明:请实现链表后再遍历输出结果!

2025-06-22 10:15:08 498

原创 ROCKX+RV1126视频流检测人脸

上图是rockx+rv1126的大体流程,首先要初始化模块包括VI模块、VENC模块、并启动VI模块采集视频流、rockx模块的初始化。初始化模块后,就要分两个线程处理了。主线程是负责rockx对VI视频流的处理,并用OPENCV对人脸进行画框,最后把处理后的VI数据传输到VENC模块里面。第二个线程,从VENC模块获取到H264的编码码流数据,并把VENC码流数据保存。

2025-06-18 11:02:44 866

原创 rockx常用的API讲解

Rockx框架提供了一系列人脸检测与识别API,主要包括:1)rockx_create创建句柄,选择功能模块(如人脸检测、识别、口罩检测等);2)rockx_face_detect检测人脸位置;3)rockx_face_recognize提取人脸特征;4)rockx_face_feature_similarity比对人脸相似度;5)rockx_face_align人脸对齐等功能。该框架支持多种计算机视觉任务,通过API可快速开发人脸相关应用,核心是rockx_handle_t结构体的创建与管理。

2025-06-18 11:02:12 875 1

原创 rockx读取单张图片并检测图片内人脸的矩形

后面查阅资料发现:可能是自己使用的板子SDK与学习的视频中的版本不同,路径的配置有所不同。所学视频用的是:ROCKX_CONFIG_BIN_PATH来设置路径,这个在我的板子上就会导致找不到模型,然后改成ROCKX_CONFIG_DATA_PATH后就没有问题了。这里易错:使用的是 rockx_add_config(face_detect_config, ROCKX_CONFIG_本次代码主要实现如何通过rockx的框架进行人脸的检测,并把人脸画出来。把对应的rockx路径配置进去,在我们的板子里面在。

2025-06-16 19:26:30 565

原创 RV1126+OPENCV在视频中添加时间戳

, 1+p->tm_mon(gmtime返回的月份是从0开始,换言之就是第一个月对应的索引值是0而不是1,所以我们要得到真正的月份都需要加1),p->tm_mday(日的输出,正常输出就行),8 + p->tm_hour(由于格林威治获取的小时和北京时间有8个小时的时差,因此我们要获取当前的本地时间需要+8小时才能够得到真实的小时),p->tm_min(分钟的输出,正常输出),p->tm_sec(输出秒数)。然后再调用putText把时间戳的字符串,叠加到OPENCV的矩阵上面,具体的实现。

2025-06-16 19:25:59 1121

原创 rv1126+opencv多线程同时对视频进行膨胀和腐蚀

我们之前进行的单独的视频膨胀与腐蚀操作,现在我们用一个工程同时对视频流进行膨胀与腐蚀的操作。思路流程如下图:我们看到,进行膨胀与腐蚀的线程都是从VI模块获取数据,将处理后的数据发送到VENC模块,者就涉及到多线程使用共享资源,这会有资源争夺问题,为了解决这个问题我们就需要使用到互斥锁,即一个线程在获取共享资源的时候对齐进行加锁,使得资源无法被其他线程使用,使用完之后进行解锁。这一加解锁就解决了一个线程在使用共享资源的时候别其他线程打断导致数据不完整的问题。接下来介绍一下互斥锁。

2025-06-15 10:34:37 714

原创 RV1126+OPENCV对视频流单独进行视频膨胀/腐蚀操作

思路:初始化VI与VENC模块,之后开启两个线程,一个线程从VI模块获取视频流数据,用Opencv的Mat将其转成Mat矩阵之后进行用dilate膨胀,将膨胀之后的视频数据用send函数发送到venc中。另一个线程从venc中获取数据之后进行保存处理。

2025-06-15 09:29:23 551

原创 RV1126+OPENCV在视频中添加LOGO图像

主要是利用RV1126的视频流结合OPENCV的API在视频流里面添加LOGO图像,换言之就是在RV1126的视频流里面叠加图片。大体流程我们来看上图,要完成这个功能我们需要创建两个线程(实际上还有初始化过程,这里先忽略了),第一个线程是它主要是获取VI原始数据并有OPENCV转换成Mat矩阵然后添加LOGO图像,并把VI数据发送到VENC编码器。第二个线程是它主要是获取H264的VENC码流数据,并且保存到H264文件。

2025-06-11 21:46:00 1216

原创 OPENCV的cvtColor和putText的讲解

这个代码里面我们分别读取两种图片,一种是RGB图片、另外一种是YUV灰度图像、分别用cvtColor把RGB图像转换成YUV图像、把YUV灰度图像转换成RGB图像、最后用imwrite保存两种图片。cvtColor是OPENCV里面颜色转换的转换函数,它的功能非常强大。这次代码主要是转换几个常见的格式,如RGB->YUV, YUV->RGB。第三个参数:颜色转换的标识符,下面是转换的图表。是OPENCV中常见的功能,他主要的功能是在Mat。是颜色标量,字体的显示颜色。是字体的粗细程度,默认为1。

2025-06-09 19:10:48 1373

原创 OPENCV形态学基础之二腐蚀

erode是OPENCV实现腐蚀效果的API第一个参数:src的类型是InputArray,它指的是输入图像,它可以是Mat类的数据。图像的通道数可以是任意数,但是图像的深度一般是CV_8UCV_16UCV_16SCV_32FCV_64F第二个参数:dst的类型是OutputArray,它指的是目标图像,值得注意的是输出图像的尺寸、类型要和输入图像是一致的。第三个参数:InputArray类型的kernel,腐蚀操作的核。当这个值为NULL的时候,表示使用的核参考点默认是3*3。

2025-06-09 17:42:44 1161

原创 OPENCV形态学基础之一膨胀

膨胀是图像形态学的基本功能之一,膨胀顾名思义就是求图像的局部最大值操作,它的数学表达式是。从数学的角度来看,无论是膨胀还是腐蚀实际上就是把图像跟核进行卷积(是通过两个函数f和g生成第三个函数的一种数学运算,它的本质就是微积分的转换,积分转换的数学公式),如上图:图像A和形状B进行卷积操作,然后形成右边的图像,右边的图像就是A+B的图像点。所谓的核就是指任意的形状或者大小,在多数情况下,核是一个小的中间带的正方形或者圆形。,然后计算出卷积区域的最大点,并把最大的值赋值给指定的像素(如上图)。

2025-06-08 20:44:30 988

原创 OPENCV图形计算面积、弧长API讲解(2)

在一个彩色图像中有许多像素值,例如设置阈值为100,大于100的像素变成100,小于的变成0或者其他值。其就是将多个像素点变成两个。:可以使图像中的数据量大大降低图像的复杂度,并且能够凸显出图像中的轮廓。src源图像,可以是8位灰度图,也可以是32位的三通道图像dst目标图像阈值二值图像中灰度最大值,maxval只能在和有用,但是其他选项也需要填这个值,不能空着。二值化阈值处理会将原始图像作为仅有的两个值图像它针对的像素的处理方式是对于。

2025-06-08 20:31:31 1244

原创 OPENCV图形计算面积、弧长API讲解(1)

之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API如等等。

2025-06-08 14:06:14 1314

原创 Opencv查找图形形状的重要API讲解

摘要:OpenCV中的图像形状检测主要通过Canny边缘检测、findContours轮廓查找和drawContours轮廓绘制三个核心函数实现。findContours用于从二值图像中提取轮廓,支持四种检索模式(如RETR_TREE建立轮廓树)和三种轮廓近似方法。drawContours则用于可视化轮廓,可控制颜色、线宽及填充方式。Canny函数通过高斯滤波、梯度计算、非极大抑制和双阈值处理实现精准边缘检测。典型应用流程包括:灰度转换→Canny边缘检测→findContours提取轮廓→drawCont

2025-06-07 17:38:32 1178

原创 Opencv中的addweighted函数

addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的,并添加一个标量值(如亮度调整)。它常用于实现图像混合、特效叠加、亮度调节等视觉效果,在计算机视觉应用中广泛用于创建透明效果、淡入淡出过渡或图像增强等场景。函数执行的运算是基于每个像素点的线性加权和。数学公式如下:dst(i,j)=α×src1(i,j)+β×src2(i,j)+γ 简化公式就是:dst=α∗src1+β∗src2+γ。

2025-06-06 21:09:18 1215

原创 Opencv中的copyto函数

与第一种是参数可以是一张输出图像第二种一张输出图像和一个掩码图image.copyTo(imageROI),把image这张图复制到imageROI上是不仅把image这张图复制(copy to)到mageROI上,且image对应mask中像素值为0的像素点都不会贴到imageROI上。

2025-06-06 15:29:36 1157

原创 OPENCV的AT函数

在 OpenCV 中,at()是一个模板成员函数,用于访问和修改矩阵或图像中特定位置的元素。它提供了一种直接且类型安全的方式来操作单个像素值,但需要注意其性能和类型匹配问题AT函数是OPENCV中重要的函数之一,它的作用是修改Mat的矩阵某个像素值,也就是我们要修改图像中的像素点就需要利用AT函数去获取并且修改,AT函数的修改一般需要循环cols和rows。然后对每个像素点进行修改。下面这段代码的作用是调整图像中每个像素的颜色值,以此改变图像的整体色调是蓝色(B)通道。为绿色(G)通道。

2025-06-04 20:08:29 772

原创 OPENCV重点结构体Mat的讲解

在OPENCV中,Mat是整个图像存储的核心也是所有图像处理的最基础的类。Mat主要存储图像的矩阵类型,包括向量、矩阵、灰度或者彩色图像等等。Mat的对象可以分成矩阵头和矩阵数据两个大部分,矩阵头是存储图像的长度、宽度、色彩信息等头部信息;矩阵数据则是存储具体的图像数据。若开发者想对OPENCV的Mat中的信息进行修改,则是改变像素信息的数据部分。Mat的输出一般包含图像的宽度、高度、通道数量、通道深度、字节类。

2025-06-04 18:42:44 1546

原创 队列的讲解:C++队列的使用

假设此时没有一个缓冲的时间,解码端可能会因为处理速度的问题,导致解码视频的时候会出现花屏、卡顿等问题。所以,此时我们就需要用队列进行缓冲,使其传输速度降下来,那解码端的解码压力就会大大降下来,此时解码出来的画面质量就会高很多,具体的流程如图二。所以使用队列的时候,我们可以保证数据的顺序不会出现乱序的错误。这就相当于排队一样,刚入队的人需要排在队尾(rear),每次出队的都是在队首(front)。在多线程里面所有的操作都需要上锁,包括出队、入队,或者其他的业务操作都需要上锁,保证数据的安全性。

2025-06-03 18:31:54 1063

原创 低分辨率(1280 * 720)编码码流推送流媒体讲解

这里面有几个比较核心的地方:video_data_packet的视频数据包赋值到AVPacket,这里要赋值两部分:一部分是AVPacket缓冲区数据的赋值,另外一个是AVPacket的长度赋值。init_rkmedia_ffmpeg_context是初始化rkmedia_ffmpeg_config的设置,关于这个函数的内容在之前的课程已经说了。这里不做过多的介绍。上面的代码是从LOW_VIDEO_QUEUE队列里面取出每一帧1280* 720的H264数据,并且赋值到AVPacket的过程。

2025-06-03 18:31:16 836

原创 RV1126的高分辨率VENC编码模块的设置

介绍视觉项目的高分辨率(1920 * 1080)的VENC编码模块的讲解,在这个项目中VENC编码模块参数的设置是至关重要的,它可以对VI数据进行硬件编码让其可以进行高分辨率编码码流的推流(如上图)。高分辨率VENC模块的配置在源文件里面。

2025-06-02 19:13:23 714

原创 FFMPEG推流器讲解(4):FFMPEG时间戳、时间基、时间转换的讲解

本章节主要介绍FFMPEG的时间概念,包括。

2025-06-02 19:12:37 1129

原创 FFMPEG推流器讲解(3):RTMP协议讲解

TimeStamp Delta和TimeStamp最大不同的是,它存储的是和上一个Chunk的时间差,其他的和TimeStamp相似。它占用3个字节,它表示的是所在的流信息、消息长度和类型都是相同的。上面这个图是chunk basic header长度为3byte的情况,这种情况的chunk header的特点是,第一个字节的位置全部设置为1。:表示的是时间戳,占用三个字节。它代表的是解析时候的实时时间戳,它最大的取值范围是0xffffff,当时间戳超过这个最大值的时候,所有字节位设置为1。

2025-05-29 20:33:23 1024

原创 FFMPEG推流器讲解(2)

FLV流媒体协议是美国。

2025-05-29 20:31:46 639

SDL文字库介绍和RV1126交叉编译SDL文字库

各种库压缩包

2025-05-22

Qt C++简单图形界面与绘图实验

Qt C++简单图形界面与绘图实验完整工程代码

2025-05-06

QT数据库实验完整代码工程

QT数据库实验

2025-05-06

蓝桥杯嵌入式省赛赛点资源包

蓝桥杯嵌入式省赛赛点资源包

2025-04-24

蓝桥杯嵌入式国赛资源包

蓝桥杯嵌入式国赛资源包

2025-04-24

蓝桥杯嵌入式各种历年代码模拟题代码

历年真题代码等等

2025-04-24

电子线路课程设计,音频功率放大器

电子线路课程设计,音频功率放大器

2025-04-24

个人的多路防盗设计课设

个人的多路防盗设计课设

2025-04-24

text13届真题二.zip

text13届真题二.zip

2025-04-20

蓝桥杯嵌入式14届测试题代码

蓝桥杯嵌入式14届测试题代码

2025-04-20

蓝桥杯嵌入式13届省真题

蓝桥杯嵌入式13届省真题

2025-04-20

蓝桥杯嵌入式十四届模拟1代码

蓝桥杯嵌入式十四届模拟1代码

2025-04-15

蓝桥杯嵌入式十四届模拟2代码

蓝桥杯嵌入式十四届模拟2代码

2025-04-15

蓝桥杯嵌入式十五届模拟1代码

蓝桥杯嵌入式十五届模拟1代码

2025-04-15

蓝桥杯嵌入式十五届模拟三代码

蓝桥杯嵌入式十五届模拟三代码

2025-04-15

蓝桥杯嵌入式模拟三代码

蓝桥杯嵌入式模拟三代码

2025-04-15

蓝桥杯嵌入式第十六届模拟三完整工程代码

蓝桥杯嵌入式第十六届模拟三完整工程代码

2025-04-12

蓝桥杯嵌入式十六届模拟二工程代码

蓝桥杯嵌入式十六届模拟二工程代码

2025-04-12

蓝桥杯嵌入式十四届省赛真题完整功能工程文件

蓝桥杯嵌入式省赛真题完整功能工程文件

2025-04-06

蓝桥杯嵌入式十五届省赛真题工程文件

蓝桥杯嵌入式十五届省赛真题工程文件,真题的功能都写有在里面

2025-04-06

蓝桥杯十六届模拟一工程

蓝桥杯十六届模拟一工程

2025-03-31

USB与电池供电切换 、烧录、5v转3.3v、电池充电电路 (含有原理图、嘉立创工程文件)

USB与电池供电切换 、烧录、5v转3.3v、电池充电电路 (含有原理图、嘉立创工程文件)

2024-11-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除