- 博客(39)
- 收藏
- 关注
原创 海思ISP调试记录
功能:表示在ISP BE config buffer的数量,BE Config Buffer 是图像处理流水线中的一个关键组件,主要用于 后端处理(Back End Processing)的配置数据管理。快速抓拍 :手机相机APP启动时,优先使用 quick_start 加载默认配置,确保第一帧图像在100ms内输出,后续再通过3A算法逐步优化参数。参数意义:0表示不快速启动,ISP初始化时配置sensor序列,1表示快速启动,ISP初始化是不配置sensor序列。海思ISP中的关联模块。
2025-04-24 19:12:28
185
原创 【c】信息传递,从一个cpp文件传输到另一个cpp文件
用类封装后是更安全的,因为在第一种方法中,参数是在private中,因此在类外,控制参数只能使用类中的getmessage这个函数来改变或者获取值。而在第二种方法却可以随意修改。上面代码用于将一个cpp文件中的某些参数放入一个结构体中,让这些参数可以在其他cpp文件中赋值并使用。那两种方法的区别在哪里呢?
2025-04-22 15:19:18
166
原创 YUV 数据到NV12的转换
YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,关于其详细原理,可以通过网上其它文章了解,这里我想强调的是如何根据其采样格式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来。大致意思是:先存储完所有的Y,后面紧跟着存V,V的步长(也就是宽)是Y的步长的一半,V的行高是Y的一半。存储顺序是先存Y,再存U,再VU交替存储。
2025-03-21 14:46:57
896
原创 如何修改sensor的帧率
首先我们先求pclk的值:pclk = frame_length ∗ line_length * fps,公式里的帧长和行长就是 VTS 和 HTS,这两个值默认的setting里就有,因为pclk是不变的,我们可以通过初始的30fps的setting来计算出 pclk 的值。输出帧率的需求,目的可能是要通过降低帧率,来增加曝光时间,从而提升低照度下的图像质量、或者是通过降低帧率,来减少传输带宽、又或者是通过提高帧率,抓拍高速运动的物体等等。本文主要介绍的就是如何修改 sensor 的输出帧率。
2025-03-14 14:46:42
387
原创 积分时间和快门时间的设置
快门时间(Tsh)则是控制图像传感器曝光的总时间,它结合了积分时间和一些精细调整参数,以实现对曝光的精确控制。:这是粗积分时间(Coarse Integration Time)的缩写,它是一个与积分时间相关的参数,通常用于控制图像传感器的曝光时间。:这是精细积分时间扩展(Fine Integration Time Extension)的缩写,它是一个更精细的调整参数,用于在粗积分时间的基础上进行微调,以达到更精确的曝光控制。:同上,这是每个像素行的长度,用于将精细积分时间扩展转换为与行数相关的时间量。
2025-03-13 17:22:40
256
原创 帧率的计算
帧率(Frame Rate)的单位是帧每秒(frame/s),表示每秒显示的帧数。这是每帧所需的总时钟周期数。换句话说,它表示一帧画面需要多少个像素时钟周期来完成传输或显示。帧率是通过总的时钟周期频率(每秒的周期数)除以每帧需要的周期数来计算的。分子整体表示每秒可以处理的。
2025-03-13 16:12:38
1109
原创 【c++】cpp程序编译过程,动态库和静态库制作过程和原理
每个程序通过源程序变成静态库,嵌入到每个程序的代码段中。因此每有一个程序需要某个源代码,就需要生成一份静态库文件。同一份代码存放在代码段存放了三份,内存消耗严重:因为每次都是编写好静态库再使用,这个静态库,如果代码更新了,则要重新编译静态库。:当编译完静态库之后,则与源程序就无关了,因此没有源程序,使用静态库即可独立运行。
2024-11-19 17:58:38
290
原创 【c++】区分接口继承和实现继承
设计类中的函数时候,应该注意使用纯虚函数还是,虚函数,还是non-virtual函数。:基类无法被创建对象,强制派生类重写提供具体的实现。:用于实现运行时的多态,允许派生类重写。:具体指定接口继承以及强制性实现继承。
2024-11-18 16:21:58
81
原创 【c++】避免遮掩继承而来的名称
3、对于父类重载,子类重写了其中的某个函数,想在main函数中调用子类的另一个函数。1、好的代码不应该让其通过编译,而不是在运行的时候体现出来。2、要明确作用域的概念,知道怎么找对应的名字。
2024-11-18 14:50:24
201
原创 shell脚本杂碎汇总
这个模板是一个典型的命令框选择模板。do的配对是done;easc是用于结束case,就不会往后面的case走了;每一个选项后面要加一个),告诉编译器该选项结束。break是解释select。*)表示除上面外的所有按键。开头一般需要添加 #/bin/sh。① select,模板如下。
2024-11-15 14:10:37
194
原创 【c++】类型的强转,static_cast
强转,经常在实际的函数中,需要将void*类型的数据强转为对应类的指针,此时就可以使用static_cast。
2024-11-13 16:22:52
87
原创 【c++】多态中,尽可能使用值传递
第一个main函数中调用test执行的是class Window中的display,第二个main函数中调用的是specificWindow中的display,体现了多态。第一个类的形参是值传递,第二个形参是引用传递,那效果上有什么差别呢?看看这两个代码块的区别,区别在于两个类的形参中。话不多说,直接上案例,在案例中解释说明。
2024-11-07 09:47:07
247
原创 【c++】线程中想要调用类中非静态成员函数方法
此线程中要调用Get_State_Button,但是此时的调用的Get_State_Button要求的是。void* Get_State_Button(void*),那么如何在线程中运行想要的函数呢?可以把Get_State_Button作为一个中间函数。这样就可以正常使用其中的代码。
2024-11-06 14:56:46
150
原创 不要在.h文件中使用全局变量
在Linux系统中,当你在编译或链接程序时遇到“multiple definition of xx”错误,这通常意味着同一个符号(如变量或函数)在多个地方被定义了。这种情况会导致链接器无法确定该符号的最终地址,从而报错。如果你在头文件中定义了全局变量或函数,而这个头文件被多个源文件包含,也导致重复定义的问题。有多少个引用的源文件,就会有多少重复的全局变量和函数,且他们都是同名。为了避免这种情况,应该使用。因此要么不要在.h中使用全局变量,要么用extern使用。关键字声明变量,并在一个源文件中定义它。
2024-11-04 17:20:11
154
原创 signal信号在c++类与对象中,往往伴随static
为什么要伴随static,因为,如果不是static的成员函数和变量,存活的时间只有是对象的创建和消亡期间,有static后的成员函数和变量,存活期间为这个程序的运行时间段。显然,我们的signal中断的运行时间要在整个程序的运行期间,不能单凭某个对象的创立和销毁决定。那么为什么signal要使用static呢?// 调用静态成员函数,不需要创建对象。// 静态成员函数声明。// 静态成员变量定义和初始化。// 静态成员函数定义。
2024-11-04 17:09:19
221
原创 使用多态时,基类应该声明一个virtual析构函数
为了确保在使用多态性时能够正确地释放资源并避免内存泄漏,基类应该声明一个虚析构函数。这样,通过基类指针删除派生类对象时,可以保证派生类的析构函数被正确调用,从而正确释放所有资源。
2024-10-26 11:31:25
657
原创 Effective C++
比如,有些数据,不希望别人能够copy,比如房地产数据,希望数据的唯一性,不希望这些数据被copy,但是我们上面知道有拷贝函数和拷贝赋值函数。如果让这两个函数失效则能够防止数据被拷贝生产拷贝数据后的对象。其实不然,用friend依然可以使用private中的函数,因此要继承,且把两个函数放在基类的private中。// 分配新资源并复制数据。// 调用拷贝赋值操作符。// 拷贝赋值操作符。
2024-10-26 10:52:59
410
原创 构造函数加explicit的意义
构造函数加explicit的意义是防止编译器在某些情况下自动执行隐式类型转换,以提高代码的明确性和安全性。具体来说,当一个类的构造函数被声明为explicit时,编译器就不会自动进行隐式类型转换。// 不可以调用,因为发生了隐式转换,但被explicit阻止了。总之,使用explicit关键字的主要目的是防止因隐式类型转换而导致的潜在错误,并使代码更加清晰、易于理解。中,构造函数没有使用explicit关键字,因此它允许隐式类型转换。中,构造函数使用了explicit关键字,因此它不允许隐式类型转换。
2024-10-24 17:11:01
317
原创 strstr函数-----可以用于查找字符数组中是否存在特定的字符
函数声明:char *strstr(const char *str1, const char *str2)头 文 件:#include <string.h>返 回 值: 返回值为char * 类型( 返回指向 str1 中第一次出现的 str2 的指针);如果 str2 不是 str1 的一部分,则返回空指针。
2024-10-23 10:54:45
202
原创 显示屏相关
在数字图像处理中,像素点是构成图像的基础元素。通过调整每个像素点的颜色和亮度,可以生成各种复杂的图像效果。同时,像素点也是衡量图像质量的重要指标之一。像素点数量越多,图像越清晰、细腻;反之,则可能导致图像模糊或失真。
2024-10-21 21:53:10
318
原创 vector使用
cout << "容器的容量为\t" << datas.capacity() << endl;// 容量是最大存储量。cout << "容器的大小为\t" << datas.size()<< endl;// 大小是当前存储量。//删除容器内所有值为n的数据。
2024-10-11 10:04:01
195
原创 解析数据------sscanf
sscanf函数的语法和参数sscanf函数的语法如下:str:要解析的输入字符串。format:格式字符串,指定了要匹配的格式规则。...:可变参数列表,用于接收解析后的数据。sscanf函数的使用方法。
2024-10-10 20:19:23
782
原创 Git来处理bug分支
很多时候,正在某个分支上进行工作,突然收到要去处理另一个分支的bug。那么此时需要将本分支的工作进行保留再去处理另一个分支上的bug。接着去其他分支处理bug。最后回到dev去工作。
2024-10-09 14:32:31
210
原创 Git--分支管理
一、创建分支二、查看当前分支三、在dev分支修改文件后提交四、回到master分支,查看我们的readme.txt文件五、将dev工作成果合并到master分支上六、删除dev分支节点七、小结
2024-10-09 11:24:11
131
原创 git 的使用
如果修改了但是还没有add,则用git checkout -- filename 可以将文件回到上一次add的情况。touch readme.txt 创建readme.txt文件,并进行初始编写。在不断的add和commit后会存在很多的版本,但是有时需要回到特定的版本。此时会撤销之前的add,然后使用上一个git check可以将文件退回到上一个add。add加入的是暂存区,而commit才会最终进行提交。第一列为版本号,可以通过上一个指令回到对应的版本号。readme.txt已经回退到上一个版本。
2024-10-08 21:05:27
409
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人