C++
pangdawa
这个作者很懒,什么都没留下…
展开
-
ubuntu编译和链接特定版本的opencv和boost
编译boost,下载特点版本zip包以后,这里用版本1.76为例,先执行./bootstrap.sh,再执行。这里得写成Boost::serialization,而不是boost_serialization。xxx根据实际情况填写,install目录就是上面opencv的安装目录。如上,make install后 安装到了父目录的install目录下。那么 find_package(OpenCV) 之前加上。这里假设只用serialization 模块,编译opencv,网上资料已经很多,原创 2024-06-20 14:19:58 · 383 阅读 · 1 评论 -
内存错误排查利器 ASAN的使用,本机或者交叉编译
使用c++开发系统,代码太大,逻辑太复杂以后,碰到内存问题,如果只靠静态分析太难了。然后自己想是不是开发一个工具,监视分配的每一块内存的访问情况,然后搜了下,发现已经有了,就是ASAN。将报错信息最后一列的偏移地址,即0x开头的地址全部拷贝出来到一个文本文件addr.txt中,每个地址一行。可以使用 addr2line 或者 llvm-symbolizer.exe 定位到具体代码位置,两者都是NDK提供的工具。PC上直接执行的话,如果是本地编译,那直接可以看到崩溃的调用栈,精确到行号。原创 2024-01-24 11:28:59 · 767 阅读 · 0 评论 -
智能指针的延迟报错问题
智能指针的延迟报错问题原创 2024-01-04 10:52:41 · 376 阅读 · 0 评论 -
g2o源码阅读
之前写的g2o源码阅读笔记,分享给有需要的人。整个文档请自行下载,这里只贴一个图片。原创 2023-03-03 14:54:53 · 178 阅读 · 0 评论 -
音频编解码相关的资料总结
最近工作需要做一个音频推送,也就是将音频数据推送到某个服务器,服务器解码后播放,服务器是乙方负责,但乙方貌似只是在网上抄代码,根本不清楚一些技术细节和要点,等于自己来把坑踩一遍,,,首先,需要得到PCM数据,也是就找了个WAV文件,因为WAV文件里面往往直接包含了原始PCM数据,然后发现很多介绍WAV文件格式的资料和实际情况对应不上,主要是文件头的结果对应不上。比如百度文库的这篇文章,https://wenku.baidu.com/view/fb783def89eb172ded63b77e.html这原创 2021-03-26 20:44:59 · 428 阅读 · 0 评论 -
cmake使用pkg-config
pkg_check_modules(ffmpeg REQUIRED IMPORTED_TARGET libavcodec libavformat libavutil)add_executable(softDecode demuxing_decoding.c)target_link_libraries(softDecode PRIVATE PkgConfig::ffmpeg)原创 2021-02-04 09:58:01 · 962 阅读 · 0 评论 -
一个编译错误
/usr/include/c++/4.2.1/ctime:66: error: '::clock_t' has not been declared/usr/include/c++/4.2.1/ctime:68: error: '::tm' has not been declared/usr/include/c++/4.2.1/ctime:70: error: '::clock' has not been declared/usr/include/c++/4.2.1/ctime:71: error: '原创 2021-01-15 10:46:46 · 538 阅读 · 3 评论 -
Halide 初步使用
最近开始使用Halide做点事情,说找点资料,结果网上基本都是翻译下官方教程,还得自己摸索。Halide的目的是更方便地做优化,即不牺牲代码可读性的情况下利用硬件加速代码执行。更详细的说明参考原始论文。这里直接说怎么上手的事情。Halide的文档确实不如OpenCV,这就是差距吧。就比如说,首先应当介绍下核心的数据结构以及围绕这些数据结构有哪些关键API,《Learning OpenCV》这方面就做得比较好。所以 这篇文章大致按照这个套路来,而不是上来就直奔有哪些优化操作。看了Tutorial的第一个原创 2021-01-07 21:06:55 · 1409 阅读 · 0 评论 -
linux上面绑定某个线程到指定CPU上
可能在arm平台上用这个比较多点,因为ARM平台上面一般有所谓大小核,把 运算量多的线程绑定到大核上往往能提高效率。不这样做的话,有时候系统会让大核躺平不干活。查看cpu信息用 cat /proc/cpuinfo编程步骤:1 代码最前面#define _GNU_SOURCE不加这个链接找不到相应函数2 需要绑定的线程调用如下函数即可,参数为CPU核心编号,注意,是从0计数的short CorePin(int coreID){ short status=0; cpu_set_t原创 2020-10-30 16:44:18 · 408 阅读 · 0 评论 -
opencv获取RTMP/RTSP视频流数据 并 显示或者进行进一步处理
临时接到这个需求,比较陌生,搜了很多资料,比如 libRTMP, rtmpdump等工具,最后发现原来 opencv的 VideoCapture 可以直接打开 RTMP视频流。但是 直接去官网下载的 dll 却不行,看了下 VideoCapture 的构造函数,第二个入参有很多可选项,其中一个是 CAP_FFMPEG, 于是 把 OpenCV重新编译了下, 带上FFMPEG选项, 这下就成功了!非常简洁!测试代码如下void rtmpTest() { string source = "rtmp:/原创 2020-07-07 14:54:33 · 7176 阅读 · 3 评论 -
unordered_map 非内置类型自定义hash
struct KeyHasher{ std::size_t operator()(const std::pair<unsigned int, unsigned int>& k) const { using std::size_t; using std::hash; return ((hash<unsigned int>()(k.first) ...原创 2020-01-08 16:35:25 · 425 阅读 · 0 评论 -
那些奇葩的编译和链接错误
早就该记录一下1 某个工程编译出的库,其他工程链接不上, 查看了符号,是有的,发现 cmakelists.txt中的版本号不一样,把 低的改高, 好了2 编译某工程, 发现 很多地方报 assert 未声明错误, 原来是 自己代码中包含了一个空的assert.h ,去掉这个文件好了,3...原创 2019-12-09 11:45:20 · 167 阅读 · 0 评论 -
博弈,游戏,是否有先手必胜的情况
最近做一个题, 说是 判断 某个游戏 是否有先手必胜的情况, 在草稿纸上画了画, 想了一阵,发现 把 所有当前游戏的局面描述为一个状态, 状态之间的变化 实际上构成一颗 多叉树, 如果 有先手必胜的情况, 那么这棵树 就会具有某种特点,即 包含某性质的某颗子树, 然后自己 便陷入 严格定义树的特定,然后 试图编码查找这样的树, 发现 挺恼火。第二天开会的时候, 发现可以不用管这么多。树中某个节点...原创 2019-12-07 21:45:34 · 611 阅读 · 1 评论 -
稀疏矩阵的乘法
最近做一个题, 稀疏矩阵的乘法, 自己想了下,最直观的想法当然是 记录 下来 哪些 不为0的元素,只对这些元素进行操作, 假设 A * B, 由于 矩阵乘法的定义是 A的某行乘以 B的某列, 产生的第一个想法是 记录下来 A的每一行中不为0的元素的列号, 记为 集合 AN, 记录下来 B的每一列的行号,记为 集合 BN。然后 进行计算。 等写代码的时候才发现, 需要列号 和行号对应 两个数字 才...原创 2019-12-07 21:37:31 · 1777 阅读 · 2 评论 -
ROS opencv 版本冲突
1.必须要先把旧版本的cv_bridge卸载掉:sudo apt-get remove ros-indigo-cv-bridge2.然后下载新版本的cv_bridge:进入catkin_ws/src 目录,执行git clone https://github.com/ros-perception/vision_opencv.git3.修改cv_bridge中的cmakelists.txt...原创 2019-12-05 17:07:48 · 1420 阅读 · 0 评论 -
ROS 代码去掉 ROS 依赖
不少 开源的SLAM系统代码 依赖ROS, 引入了额外的依赖, 性能也有一定下降,调试也不方便, 因此去掉ROS依赖 有不少好处,第一个工作是 数据流的处理, 依赖ROS的时候, 数据流一般是某个节点发布传感器数据,另外一个节点获数据,做后续处理, 这个是需要改的地方第二个工作是 一些代码和ROS高度耦合, 大量使用 ROS的辅助函数,需要进行替换, 逐个进行注释太慢了, 源代码 开头加上如...原创 2019-12-05 11:01:47 · 1537 阅读 · 0 评论 -
寻找重复数
出自 LeetCode 287,给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3来源:力扣(LeetCode)链接:https://leetcode-cn.co...原创 2019-12-02 20:36:07 · 122 阅读 · 0 评论 -
鱼眼摄像头 单目标定 双目标定
准确地说是 使用鱼眼模型 对摄像头进行单目和双目标定直接贴代码如下, 如果是 非鱼眼, 把相关函数名 和相关入参改下就可以了, 代码中处于 注释状态#include <opencv2/opencv.hpp>#include <iostream>#include <dirent.h>#include <fstream>using nam...原创 2019-11-29 17:52:54 · 932 阅读 · 0 评论 -
DSO missing from command line原因及解决办法
DSO missing from command line原因及解决办法一种可能是 :ld自动递归地解析链接的lib,当加载A库的时候,一切还正常,但是加载B库的时候,ld会自动的去解析他的静态链接,所以就重复了,导致error adding symbols说明:链接取决于模块的顺序。首先请求符号,然后从具有它们的库中链接。所以你必须首先指定使用库的模块,然后指定它们之后的库。喜欢这个:g...原创 2019-11-13 10:58:51 · 19152 阅读 · 0 评论 -
g2o源码阅读详解
最近 因为工作原因 终于 比较细致地阅读了下 g2o源码, 先写了个word文档 ,应该是 网上比较详细的了后面上传到 下载资源中原创 2019-11-05 15:50:12 · 628 阅读 · 2 评论 -
只出现一次的数字
最近做一个题,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。要求 o(n)算法且不使用额外空间,想了很久,想到一个方案,统计每一位的出现次数,比如数字是32位 int 型,那么统计32个位上 1和0 的出现次数,某个数字出现3次,那么他的每一位都会出现3次。出现一次的数字某个位只会贡献1次出现。组合每个位上出现次数不是3的整数倍的值,就知道只出现一次的那个数了...原创 2019-10-26 10:22:53 · 150 阅读 · 0 评论 -
编程之美---反转整数
主要是判断溢出,自己尝试出一种很简单的方法class Solution {public: int reverse(int x) { if (x == 0) { return 0; } int tmp = x; int res = 0; while (x != 0) { unsigned int tt = (unsigned i...原创 2019-06-15 10:09:34 · 118 阅读 · 0 评论 -
编程之美---正则匹配
动态规划,关键是处理 * 号, 根据匹配次数进行 状态转移,关键点是 多次匹配时, 保留星号,待匹配字符串划掉当前匹配字符,通过递归,即为多次匹配,不需要手动去写一个循环来处理 多次匹配。仅仅 匹配一次时, 星号去掉,待匹配字符串划掉当前匹配字符。class Solution {public: int width; bool isMatch(const char * s, const c...原创 2019-06-18 10:18:22 · 136 阅读 · 0 评论 -
Huffman 编码 C++实现
大约十年前就该完成的程序,今天才搞定了,花了三个小时,直接看《算法引论-一种创造性方法》第6章 haffman 编码的方法 和 第四章 堆 的实现, 书上给的是最大堆, haffman 编码 需要用最小堆, 使用数组实现堆, 如果起始坐标从0开始带来一些麻烦,书上给的是从1 开始。之所以说十年前,是因为大三的时候(按大三算还没到10年),信息论的课上肯定是讲了这个算法的, 算法本身很直观,思想...原创 2019-06-23 20:38:46 · 3168 阅读 · 0 评论 -
移植opencv 到 ARM 平台
最近移植 一个比较复杂的程序 到 ARM 平台, 这个程序的 依赖比较多, 最麻烦的一个依赖是opencv, 因为 opencv本身有不少依赖!参考了 网上一些博客, 碰到的坑倒不算多以 opencv-3.2.0 为例, 有的博客说 先要把 jpeg/zlib 之类的依赖的源码都下载下来,编译好,再编译 opencv, 后来发现其实没必要,opencv已经把这些依赖的源码放在 ThridPar...原创 2019-09-17 11:31:59 · 417 阅读 · 0 评论 -
走向 智能指针
知道智能指针很久了,最近改造一个c# 代码,c#自动回收内存,那叫一个爽,c++却没有这个功能,但这个c#代码内存使用情况复杂, 直接改成手动回收相当麻烦,于是 不得不使用智能指针#include <iostream>#include <memory>class Segment{public: int x; int y; Segment(int _x,...原创 2019-10-06 11:24:36 · 265 阅读 · 0 评论 -
botch 数据集 标注信息转换为 csv 的 python实现
长期以来都是使用 AWK, 但 botch 这个好像用 awk略麻烦,使用python 试试,就当练手了# -*- coding: utf-8 -*-"""Created on Wed Mar 20 14:33:33 2019@author: panghaiyan"""import osfile = open("train.yaml", "r")iter_f = iter(...原创 2019-03-25 16:17:52 · 250 阅读 · 0 评论 -
如何实现带两个滑块的滚动条
分析http://www.codeproject.com/Articles/15112/A-Slider-with-2-Buttons两个滑块,一开始以为自己画两个位图,然后跟踪鼠标,进行滑动作者的想法是创建两个窗口感觉作者windows编程功力很好,两个类也封装得很好原创 2013-12-13 11:08:52 · 3678 阅读 · 0 评论 -
编程之美---找出翻烙饼的最少次数
最近把《编程之美》上这个题做了下, 觉得挺简单的啊,就是一个广度优先搜索,用到的数据结构是 数组+队列+栈, 搜索空间还需要进一步优化感觉代码比 书上的要简单些,就是一些小函数 组合一下,不要使用类!!!#include <iostream>#include <vector>#include<queue>#include<stack>u...原创 2019-06-09 11:44:31 · 316 阅读 · 0 评论 -
编程之美---NIM游戏
使用了深度搜索、深度优先遍历多叉树等方法,最终输出 先手 必胜策略下的每一步状态转移,奇数步对应先手,偶数步对应后手#include <iostream>#include <vector>using namespace std;struct Sta{ int pos; // 从第几个位置取,从0开始计数 int len; // 取几个数,1或者2};...原创 2019-06-13 17:54:53 · 2302 阅读 · 0 评论 -
最近做的一些优化工作
最初的优化是多线程, 每层单独处理, 然后是优化了个别函数中 优化直接使用 Mat 运算时 出现大 大量临时 Mat/ MatExpr 对象这种问题, 尝试过 Intel 编译器, SSE指令集 去掉高斯模糊解决的问题有: 姿态漏发,通过屏幕录像专家 崩溃问题, 汇编调试, coredump 文件使用 OpenCV 的API 有两种优化思路: 1 数值运算如果量大,那么去掉直...原创 2018-10-15 16:15:16 · 291 阅读 · 0 评论 -
opengl坐标变换 整个流程的计算
之前用opencv求得某个物体位姿后,结合 相机 内参数矩阵, 使用 opengl 将其渲染出来 使用内参数矩阵计算出投影矩阵, 然后 思考了下 opengl 环境下 某个3D点最终在渲染窗口 的像素坐标是如何计算出来的 最终得到了如下代码, opengl 的坐标计算过程 参考如下链接 http://www.songho.ca/opengl/gl_transform.html 这个人 应原创 2017-07-09 18:34:25 · 527 阅读 · 0 评论 -
openGL 纹理使用
openGL 纹理的使用总结纹理openGL原创 2016-08-10 19:32:37 · 4433 阅读 · 0 评论 -
将doc文件批量转为pdf文件
需要将不少doc文件转为pdf,WPS带有这种功能,但是鼠标点击次数太多以后整个人都变得很烦躁用了一下午去搜这方面的工具软件,找到若干。有一些免费,有一些试用的,但总归就找到一个真正能用,虽说生成的文件名中有未授权字样,但批量修改文件名简单多了。谁知道到了实验室的电脑上因为什么打印机错误,还是不能用!于是决定自己写一个,第二天上午开始搜资料,乱搜一阵,居然发现WPS有二次开发的功能...原创 2014-03-22 16:28:41 · 11611 阅读 · 7 评论 -
windows程序显示opencv的IplImage
先贴下关键代码,后面来完善void ShowMFC( IplImage *img, CDC *pDC,CRect dets_rect, CVideoPlayDlg* video_tmp ){ DWORD height=img->height; DWORD width=img->width; int widNew = width - width % 4; // 凑成4的倍数,否则宽原创 2014-03-14 14:42:42 · 12792 阅读 · 0 评论 -
关于windows程序的消息循环
一 消息循环二 工作线程SendMessage三: 关于消息响应中创建模态对话框阻塞线程消息循环的问题原创 2014-01-21 11:29:15 · 6042 阅读 · 0 评论 -
c++中字符串与数值的相互转换
c语言的方法先开辟缓冲区,然后sprintfatoi, itoaC++中可以采用字符串流比如convert 参考《C++ primer》中文版第四版 8.5节 字符串流原创 2013-11-27 15:23:16 · 1407 阅读 · 0 评论 -
ultraMaGE 分析零
最近因为项目原因,想看点开源代码,借鉴借鉴下程序结构。在网上搜了一阵,先是找到这篇文章最受欢迎的VC开源项目然后在这里面找到了ultraMaGE一个文件操作程序,貌似是一个德国人写的项目地址在https://sourceforge.net/projects/ultramage/原创 2013-11-24 15:16:32 · 1268 阅读 · 0 评论 -
ultraMaGE 分析一 WinMain流程
没弄错的话,整个程序的大体结构是Visual Studio生成的首先来看入口函数_tWinMain显示调用了 OleInitialize(0); //COM initialisieren _tsetlocale(LC_ALL, TEXT("")); //user-default初试化COM,后面那个估计是语言相关的东东,后面再查。我对COM技术不太了解,估计是程序用到的某些原创 2013-11-24 15:39:44 · 1105 阅读 · 0 评论 -
ultraMaGE 分析二 消息响应
ultraMaGE里的WndProc依然大量使用case结构,要是像WTL那样进行消息映射,每个消息的处理弄成一个成员函数就爽多了。先做了一些通用空间的初始化工作貌似一个FileList对应一个面板在Init中创建图像列表资源,其中涉及到文件图标然后创建各面板窗口(父窗口为之前创建的主窗口)以面板窗口为父窗口创建状态栏,Rebar,(注意Rebar是工具栏和地址原创 2013-11-24 21:09:33 · 1173 阅读 · 0 评论