数据结构与算法
文章平均质量分 66
数据结构,hash,链表,堆,栈,队列,无锁队列
qianbo_insist
AI,网络安全,nodejs,c++ ,java,.net
email :[email protected]
weixin:18091589062
展开
-
解码视频流在opengl中的贴图投影计算
我们把视频当成纹理,首先要确定贴入的坐标,原始坐标如下所示实际上我们要确定的是opengl的投影视窗,视窗大小就是位置,相当于把解码图像放到窗口中的什么位置,这里并不是纹理位置,纹理位置是具体取到那一块的纹理,涉及到放大缩小,我们写一个顶点着色器,如下所示330没有任何约束,放出来的贴图会随着窗口的变化而变化,问题是不成比例,视频展现失比例拉伸,对展现并不友好。我们要使用向量的运算来修改投影视窗。原创 2024-03-28 21:58:54 · 541 阅读 · 1 评论 -
一种视频算法插件流水线执行架构
流水线插件架构,windows和linux下通用原创 2023-04-26 14:21:45 · 539 阅读 · 0 评论 -
GB28181系统设计-摄像头位置聚类快速搜索Kd-Tree算法(二)
GB28181系统设计之-事件系统GB28181事件 在上一篇里面讲了事件分享,此事件系统需要和数据库订阅和发布一起做,所以我们的数据库系统还没有讲结束,这一章将会分享摄像头聚类的快速搜索,使用kdtree数据结构和算法。为什么需要该算法?在事件系统中,一旦发现我们所搜索的目标,我们就需要在临近的摄像头继续搜索该目标,并且不断递归到我们所要的边缘。制作自己的订阅和发布系统可以查找我写的如何做一个国产数据库文章。kdtree &nb原创 2022-03-27 14:35:53 · 5124 阅读 · 0 评论 -
linux 高级文件IO
1、I/O 概念首先明确概念:I/O 的意思是:输入 输出,任何流程也都是输入输出。任何流也是输入输出,如内存,文件,网络1.1 分散 聚集 I/O允许一次调用同时从多个缓冲区读取数据或者写入多个缓冲区。**适用场景:**聚集多个不同的数据结构变量,完成每次的I/O事务。和我们普通的读写文件程序不一样,分散聚集I/O称为向量 读写, 一次可以写入多个缓冲区,这个对于存入不同内存区域的缓冲区写入文件来说非常方便函数:writev#include <stdio.h>#include原创 2021-08-08 09:17:29 · 249 阅读 · 1 评论 -
opencv 鱼眼矫正
前提这里不讨论怎么获取矫正参数,假定已经获取矫正参数使用undistort#include <opencv2\opencv.hpp>using namespace cv;void correct_photo(const char * jpg){ Mat src = imread(jpg); Mat distortion = src.clone(); Mat camera_matrix = Mat(3, 3, CV_32FC1); Mat distortion_coeffici原创 2021-07-05 17:21:13 · 1258 阅读 · 0 评论 -
积分图像追踪目标 (一)
积分 积分是微积分学与数学分析里的一个核心概念。通常分为定积分和不定积分两种。对于一个给定的正实值函数,在一个实数区间上的定积分可以理解为在坐标平面上,由曲线、直线以及轴围成的曲边梯形的面积值(一种确定的实数值)。1、与直方图比较 在图像处理上积分图是非常有用的,直方图的计算是遍历图像的全部像素并累计每个强度在图像中的次数,但是有一个缺陷:假定要对图像中多个感兴趣的区域计算几个直方图去做识别或者跟踪,这时就耗时原创 2021-07-03 18:44:45 · 324 阅读 · 1 评论 -
java 如何秒速写一个线程启动
线程java 的线程相对c,c++来说基本是类似的,尤其是使用lamba都是非常快速的就能启动一个线程,相对于使用api来说,简化了很多。有几种方式可以使用:1、使用静态内部类java的线程类可以直接从Runnable上继承,实现 run()函数即可static Map<String,String> v_map = new ConcurrentHashMap<String,String>(); static class th1 implements Runnable原创 2021-07-01 09:33:11 · 352 阅读 · 0 评论 -
java和c++ 删除hash表的内容
import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class TestMapRemove {public static void main(String[] args){new TestMapRemove().removeByIterator();// new TestMapRemove().removeBymap();}pub原创 2021-07-02 06:16:55 · 980 阅读 · 0 评论 -
如何做一个国产数据库(三)
一和二如何做一个国产数据库一如何做一个国产数据库二1、数据结构重新定义再次重新定义数据结构typedef struct sdata{ uint32_t index; char vardata[128];}sdata;typedef struct sdata_index{ uint32_t index; uint32_t offset;}sdata_index;//增加的数据库上下文环境结构体typedef struct db_context{ char v_tabl原创 2021-06-27 20:42:29 · 361 阅读 · 0 评论 -
hiredis源码分析与简单封装
hiredisHiredis是一个开源C库函数,提供了基本的操作redis 函数, 如数据库连接、发送命令、释放资源等等1、hiredis nethiredis 本身就是做了跨平台的代码,c语言打造可以执行在多种平台上,看看他的net块做了些什么#include "fmacros.h"#include <sys/types.h>#ifdef _WIN32#ifndef FD_SETSIZE#define FD_SETSIZE 16000#endif#else#includ原创 2021-06-26 07:46:51 · 1312 阅读 · 0 评论 -
如何做一个国产数据库(二)
如果做一个国产数据库一链接承接上文,继续1、重新定义数据结构typedef struct sdata{ uint32_t index; char vardata[128];}sdata;typedef struct sdata_index{ uint32_t index; uint32_t offset;}sdata_index;sdata_index 是我们要读到一个内存里面去的,同时,我们会使用内存查找的方式,拿到数据的索引值,在内存里面使用二分查找算法int binSe原创 2021-06-24 21:27:14 · 414 阅读 · 1 评论 -
如何做一个国产数据库系统(一)
做一个国产数据库做一个数据库系统真的是要懂的是基础,各种基础,网络,文件系统,操作系统,性能,测试,各方面都要懂使用基本方法索引文件+数据文件+ B+ 树 ,hash空间如图是写的一个数据库文件,前面两兆字节是索引,后面是数据。最前面的8字节数据为索引总量 4字节,和 目前索引量4字节。1、定义我们的数据结构typedef struct sdata{uint32_t index;char vardata[128];}sdata;这个数据结构表明 index是索引 ,vardat原创 2021-06-23 21:17:04 · 559 阅读 · 1 评论 -
寻找素数分配线程算法
最近需要求反向最大素数和正向最近素数,1 计算机器的核心数目2 拿到大于核心数目且最近的素数3 拿到反向最大素数,两个算法场景是,分配合适的线程,并且按照素数分配到合适的线程中去,比如根据URL如请求的是 /xn/live/234来计算hash值,并且将改链接session分配到一个线程中计算有x个线程链接为session,session1,session2 …,分配到x1,x2,x3…线程中show me the code#pragma once#include <string.h原创 2021-06-22 21:39:49 · 221 阅读 · 0 评论 -
协议圣经(二) RTP组播音视频技巧
协议圣经协议圣经一是基础,还没有写,先出2RTP组播RTP为半应用层,半传输层协议,可以使用tcp,也可以使用udp,组播为D类地址,为何要使用组播,组播对什么有效,如224.3.4.5,端口选择一个9200,组播的好处是:1 由交换机和路由器来确定发包2 不用服务器转发3 在udp基础上发送方便缺点:不能跨网,不能到外网上去组播,也就是一旦确定组播方式,一般也就确定了是局域网程序,这里说一般,是因为是有mbone这种internet组播的,但是是实验爱好者组成的网,并不适合实际情况。1、h原创 2021-06-20 22:10:56 · 2281 阅读 · 1 评论 -
c函数strstr和sscanf组合高级技巧
需求上一章我们解析完了upnp协议中的http头部获取了xml文件的地址,使用http协议我们再次获取xml文件后需要解析xml,我们最害怕的就是引入一个又一个库,事实上,libupnp就引入了很多库,造成了程序臃肿,打印频繁,我们使用c语言的strstr和sscanf来手动解析xml,获取特定字符串。1、分解urlupnp协议中的LOCATION是从http头部获取而来,要知道如何获取,请看这一片文章解析http头部接下来就是使用sscanf函数来获取http 的host 端口和路由信息,如h原创 2021-06-19 17:25:45 · 562 阅读 · 0 评论 -
解析http头部和c++string的高级使用技巧
需求需求是解析upnp协议中的http 协议 和xml 中取得响应的内容,使用c++字符串的高级特性和http协议“\r\n”的特性匹配,使用std::istringstream来获取string 类中的每一行,分而治之,对每一行字符串再进行分解,达到我们解析头部的目的,事实上,没有完美无缺的技术,各个协议都是用的组合拳,把各类协议组合而得到一个完整的解决方案,upnp协议就是组播协议套上使用http 和 xml 以及soap 等来完成发现和控制。http协议头部示例HTTP/1.1 200 OK原创 2021-06-19 16:31:43 · 1639 阅读 · 0 评论 -
c++ 排序和查找
问题提出一个问题,社区里打疫苗的人统计和查找年龄,需要查找20-30岁的人,数据已经登记如何查找呢解决方案1、把登记数据依次记录2、排序3、查找定义数据结构typedef struct sdata{ uint32_t index; char vardata[128];}sdata;我们打算直接使用c++的sort函数来排序,根据数据结构定义一个rulestruct Rule { bool operator()(const sdata &a1, const sdata原创 2021-06-18 21:22:06 · 435 阅读 · 0 评论 -
h264编码基础
h264编码 h264编码10年屹立,优秀的东西总是一直在发光,相对于RGB和YUV,将数据成几百倍的压缩。 初始化包含进来的数据格式,出去的数据格式,一般我们的数据如果为BGR格式,一个像素是有三个字节组成的,那么一副图像比如720P是有多大呢,12807203 = 2764800 字节 ,一秒钟20帧数 ,那就是 2764800*20 = 55,296,000 字节,也就是一秒钟52M字节,一分钟产生的图像数原创 2021-06-18 13:09:44 · 640 阅读 · 1 评论 -
c函数sscanf的高级技巧(二)
需求解析特定json,而不引入特定的库,如字符串json字符串1 "{\"ip\": [\"http://192.168.0.103:25826/description.xml\", \"http://192.168.0.112:1283/\"]}";json字符串2 "[{\"ip\":\"http://192.168.0.103:25826/description.xml\",\"fname\" :\"Living Room 1_5336_HiDMR\"}, { \"ip\":\"htt原创 2021-06-17 22:58:03 · 706 阅读 · 1 评论