- 博客(21)
- 收藏
- 关注
原创 log4cplus编译问题
编译24年初下载的一个包,log4cplus,log4cplus-REL_2_1_1,编译的时候,总是提示catch.hpp: No such file or directory,下载了最新的catch2代码,还是提示这个错误。最后发现,老的版本,要下载老的catch2,下载了catch2的2.13.9,编译成功。
2025-03-22 19:21:16
96
原创 在ubuntu 22.04上编译Open3d-0.19.0
解决方案:修改 util/install_deps_ubuntu.sh libc++-11-dev/libc++abi-11-dev to libc++-14-dev/libc++abi-14-dev。解决方法:https://github.com/google/filament/issues/5203,修改build目录里对应文件的宏定义。在我的jetson orin 6.0上编译,遇到了一些问题。在我的mac上的docker里编译,都挺顺利的;1,cmake .. 提示找不到 c++
2025-03-14 16:28:34
201
原创 使用solvePnP进行相机外参的标定
经过学习思考和简单验证,其实这里3d坐标系可以是任意的坐标系A,通过solvePnP可以计算出相机坐标系到A坐标系的转换关系。如果有一个新的点在坐标系 A下为P1,直接左乘这个转换矩阵,就能得到在相机坐标系下的点坐标P2;其实刚看到cv::solvePnP,我是有一些疑惑的,3d点的坐标系是用的哪个坐标系,xyz方向如何。具体的流程和含义就不说了,记录一个自己的疑惑和验证过程。
2024-11-14 17:10:26
300
原创 vscode打开多文件窗口被覆盖问题
单击打开,上面的文字是预览的斜体字,在这个窗口再点其他文件,这个预览就会被覆盖。双击打开是,正体字,再点其他的文件,这个窗口不会被覆盖。看这个图,单击和双击打开的不同效果。
2024-10-11 11:19:05
286
原创 使用NVIDIA VPI做鱼眼矫正
这些算法的实现在 NVIDIA Jetson 嵌入式计算机或独立 GPU 上可用的不同硬件引擎上得到加速。对应上文,我在nvidia 平台,做了一个简单封装,使用VPI来做鱼眼矫正,一张1080P的图像,鱼眼矫正大概耗时1ms,整个处理过程大概3-5ms,基本满足工程的需求,看了一下大部分时间应该是在色彩空间转换上,需要更好的性能需要再深入细调。官方的demo里提供了很多的图像处理算法,用VPI的好处在于,Nvidia又给你造了一个库(泥坑),让你更方便地使用GPU和VIC来做图像处理。
2024-09-18 11:57:12
394
4
原创 使用OpenCV做图像的鱼眼矫正
这个操作还是挺耗时的,在我的设备上,一张1080P图像,大概需要80-100ms。在英伟达平台使用硬件加速,基本上耗时在1ms左右。不讲太多,直接上代码看效果。
2024-07-01 17:32:26
406
原创 Protobuf 25.3系列4- c++使用bytes踩坑,0x00问题
例如序列化后Hexadecimal String: 086518012a0473656e6430bf843d380140014a0811ff1000010020ff。长度的计算不要使用strlen,否则会导致解析出来的data里00后面的数据丢失。如果data使用普通的 string,一般不会有问题。2,发送的时候,或者反序列化的时候。1,string一定要指定长度。
2024-03-06 23:02:48
1521
1
原创 Protobuf 25.3系列3-生成和运行
protobuf 25.3编译好了以后,写了一个简单的proto文件,进行序列化和反序列化验证。难道现在pb文件生成以后,再编译,也要依赖absl了?
2024-03-05 20:17:23
1806
1
原创 Protobuf 25.3系列2-mac,cmake编译protobuf-c++ 25.3
proto就被安到/Users/coco/xxxx/proto-s目录下面了。第一步,先通过brew安装Abseil。第二步,进入到下载好的proto目录。
2024-03-04 21:40:25
628
1
原创 Protobuf 25.3系列1-ubuntu,cmake编译protobuf-c++ 25.3
下载protobuf的代码,我打算通过cmake的方式来编译。就好久没编译过proto,新版本需要依赖abseil-cpp。这个时候,absl就被安装到/tmp/proto目录下了。这个时候,absl就被安装到/tmp/absl目录下了。第二步,再进入到proto目录下,编译动态库。直接提示报错:abseil-cpp找不到。
2024-03-04 18:06:13
1035
1
原创 米文AD-10上CAN消息的收发
今天在米文的AD-10上测试CAN消息的收发,从网上COPY了一段代码,看起来也没啥问题,write以后也没提示错误,可是就是接收不到,百思不得其解。但是用cansend命令去发送又是正常的。否则默认值会有一些出入,导致发送出去收不到,具体的逻辑还没去研究。实在没办法,想到去看看cansend是怎么实现的。
2024-03-04 11:41:31
456
1
原创 我的工程实践-银行卡OCR里的图像处理
YUV 是一种颜色编码方法,YUV,分为三个分量:“Y” 表示明亮度(Luminance或Luma),也就是灰度值;“U”和“V” 表示的则是色度(Chrominance或Chroma)。主流的采样方式有三种YUV4:4:4YUV4:2:2YUV4:2:0这部分专业的知识,网络上有详细的解释。我们简单理解一下,RGB 和 YUV 都使用三个值来描述一个像素点,只是这三个值的意义不同。通过固定的公式,我们可以对 RGB 和 YUV 进行相互转换。
2024-01-08 11:37:21
955
原创 7,appsrc和appsink
appsrc和appsink用起来的确是方便了很多,但是引用官方的说法:“ While these methods are strongly discouraged, GStreamer offers support for them --Beware! You need to know what you are doing--. Since you don't have any support from a base class you need to thoroughly understand s..
2020-09-16 17:01:48
633
1
原创 6,capsfilter的作用
我们看一下jpegenc的CapabilitiesPad Templates: SINK template: 'sink' Availability: Always Capabilities: video/x-raw format: { (string)I420, (string)YV12, (string)YUY2, (string)UYVY, (string)Y41B, (string)Y42B, (string)YVYU, (st
2020-09-10 21:58:30
2391
1
原创 5,avdec_h264使用的2种方法
方法1,和h264parse配合使用。以前面文章里提到的例子,PIPE为:appsrc - h264parse -avdec_h264 -videoconvert -jpegenc -multifilesinkavdec_h264一般连接在h264parse后面,用来解码H264数据。向appsrc里面填充数据,参考前面的文章,直接把H264文件里读出来的数据不断放进去就可以了。方法2,直接使用。做点新的尝试,如果我们把中间的h264parse去掉,PIPE变成下面这样:...
2020-09-10 17:52:16
3024
1
原创 4,h264parse的作用
h264parse的作用,顾名思义,用来分割输出H264帧数据。如果我们输入一个H264 Raw文件的数据流到h264parse里面,h264parse输出的是什么呢?实际的H264数据帧中,往往帧前面带有00 00 00 01或00 00 01分隔符。通过添加Probe来查看流过的数据,会发现h264parse流出的数据为 :分隔符 + SPS + 分隔符 + PPS + 分隔符 + 帧数据不管是I帧还是P帧,输出的数据都包含有分隔符,SPS和PPS....
2020-09-10 17:34:36
3937
原创 0, GStreamer开发教程
最近因为工作需要,Nvidia的deepstreamer基于GStreamer,所以需要去了解GStreamer。网上的资料搜索了一下,大部分是翻译的官方文档。通过自己的实际操作和写代码测试,感受,一方面感觉GStreamer还是非常有意思的,另外也发现有些问题并不是那么容易获得想要的答案。定位不是入门教程, 不会像官方文档说的那么细致。推荐大家入门教程可以看官方文档,demo还是很容易跑起来的。这里主要是针对我自己遇到的一些疑惑做一些记录。另外也希望能帮助到和我一样在学习初期有很多疑惑的朋
2020-09-10 00:22:38
302
原创 3,向appsrc发送数据,push模式
appsrc也支持push模式。简单来说,就是你主动地把数据“填充”或者说是“发送”到appsrc里面。例如你自己创建一个thread,每间隔3秒往appsrc里面填充一次数据。我看了网上的一些demo,基本上都是通过pull模式的callback来做的, push模式相关的demo也比较不好找。在上篇文章里的代码基础上做一些改动,核心就是填充数据以后,调用一下g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret); 上篇..
2020-09-09 23:54:52
2387
1
原创 2,向appsrc发送数据,pull模式
你可以通过appsrc,往pipe里填充自己的数据。有两种模式,PULL模式和PUSH模式。简单理解,PULL模式,通过callback,主动向你要数据,你把数据填充进去就可以了。以黑和白在窗口中交替显示为例:其实这是官方的一个demo,我在运行的时候,发现使用xvimagesink运行以后没反应,改成ximagesink以后运行正常。播放时候切换的频率,和timestamp有关,可以多改动体验一下。pipeline = gst_pipeline_new("pipeline");ap
2020-09-09 22:36:14
1034
原创 1,1分钟上手GStreamer,解码h264 raw,保存成jpg
最近基于Nvidia开发板做一些开发,发现DeepStream是一个绕不过去的槛。当然你也可以有很多其他的选择,比如使用FFMPEG,但是decode,encode这些在Jetson上支持的并不是很好。或者也使用MutiMediaApi,但是难度比较高,对个人要求比较高。所以DeepStream相对来说是一个不错的选择,要弄明白DeepStream,必须得先弄明白GStreamer。安装GStreamer环境,学习了两天,基本有个入门吧。以解码h264 raw 文件为例,可以使用下面的命令,来简单看
2020-09-09 22:26:23
7642
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人