c/c++
文章平均质量分 52
洪流之源
这个作者很懒,什么都没留下…
展开
-
模型推理模板
模型部署推理模板。原创 2022-07-29 15:37:37 · 275 阅读 · 0 评论 -
C++ 11 互斥量与死锁
一、互斥量(mutex)的基本概念互斥量mutex是个类对象,可以理解为一把锁,多个线程尝试用其成员函数lock()来加锁,只有一个线程能锁定成功,如果没有锁成功,那么流程将卡在lock()这里不断尝试去锁定。互斥量使用要小心,保护数据不多也不少,少了达不到效果,多了影响效率。二、互斥量的用法包含#include <mutex>头文件2.1 lock(),unlock()步骤:1.lock(),2.操作共享数据,3.unlock()。lock()和unlock()要成对使用原创 2022-04-16 18:13:45 · 896 阅读 · 0 评论 -
skimage-SimilarityTransform的C++实现
similarityTransform的C++实现,这个主要是用在一些需要做校正的场景下,比如face align等。在python里面有很全的包可以直接使用,比如from skimage import transform as transtform = trans.SimilarityTransform()tform.estimate(dst, src)M = trorm.params注:skimage中的具体用法请参考https://blog.csdn.net/c_chuxin/ar转载 2020-12-11 15:24:57 · 864 阅读 · 0 评论 -
c++ 遍历目录下的文件
#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <dirent.h>#include <iostream>#include <string.h>#include <stdio.h>#include <fcntl.h>#include <stdlib.h>#include <vecto.原创 2020-12-02 13:53:46 · 872 阅读 · 0 评论 -
vscode c++ cmake工程示例
工程目录:源码文件:#include <iostream>int main(){ for (int i = 0; i < 10; i++) { std::cout << "hello " << i << std::endl; } return 0;}CmakeList.txtcmake_minimum_required(VERSIO...原创 2020-11-15 12:13:35 · 842 阅读 · 0 评论 -
数据结构之线性表的顺序存储结构
顺序存储结构 一.在C语言中用一维数组实现顺序存储结构1.存储空间的存储位置:数组 node; 2.线性表的最大容量 MAXSIZE;3.线性表的当前长度:length; #define MAXZIXE 20typedef struct _tag_List{char node [MAXSIZE];int length;}List;原创 2014-07-26 20:55:28 · 597 阅读 · 0 评论 -
深入理解C语言中的const
const修饰的常量,并不是真正的常量,它只是告诉编译器这是一个只读的变量,在程序里面不能直接把它作为左值,也就是不能直接给一个const修饰的变量赋值,但是该变量还是在内存中占有一定空间的,我们还是可以通过取地址操作符来得到它的地址。原创 2014-07-31 22:27:09 · 815 阅读 · 0 评论 -
理解C语言 第25课 指针数组与数组指针的分析
下面这些声明合法吗?int array[5];int matrix[3][3];int *pA = array;/*pA是指针,但不是数组指针,它是指向int类型数据的指针,array不是数组地址,而是数组首元素的地址*/int *pM = matrix;问题:array代表数组首元素的地址,那么matrix代表什么?array和&array的地址值相同,但是意原创 2014-09-20 21:39:15 · 450 阅读 · 0 评论 -
理解C语言-第22课 数组基础
第22课 数组基础数组是相同类型的变量的有序集合int a[5];数组包含5个int类型的数据,a代表数组第一个元素的起始地址。这20个字节空间的名字为a。a[0], a[1]等都是a中的元素,并非元素的名字。数组中的元素没有名字。每个元素都是int型数据。 数组的大小数组在一片连续的内存空间中存储元素数组元素的个数可以显示或隐式指定问题:i原创 2014-09-15 19:47:01 · 556 阅读 · 0 评论 -
野指针与非法内存操作
野指针野指针通常是因为指针变量中保存的值不是一个合法的内存地址而造成的。合法的内存地址:1.在堆空间动态申请的;2.局部变量所在的栈。野指针不是NULL指针,是指向不可用内存的指针,也可能是一个动态的内存地址,但是这个内存别人正在使用,这也是不合法的地址。NULL指针不容易用错,因为if语句很好判断一个指针是不是NULL。C语言中没有任何手段可以判断一个指针是否为野指针!原创 2014-11-12 15:24:25 · 2525 阅读 · 0 评论 -
linux错误处理
错误处理:函数或者系统调用在失败时会设置外部变量errno的值来指明失败原因(错误码保存在errno中)。并且必须在函数报告出错之后,立即检查errno变量,因为它可能被下一个函数调用所覆盖,即使下一个函数自身并没有出错,也会覆盖这个变量。错误代码(errnum)的取值和含义在errno.h中,可以在man手册查找。有三个有用的函数可以用来报告出现的错误,strerror ,perror原创 2014-10-13 16:20:40 · 786 阅读 · 0 评论 -
fork
1)功能与返回值父进程通过调用fork函数用来创建子进程,父进程被调用一次,但返回两次,返回两次的唯一区别是子进程的返回值是0,父进程的返回值是创建的子进程的进程ID。2)返回值成因至于为什么父进程返回子进程ID,子进程返回0,内核是这样安排的:理想情况下,不管是父进程还是子进程我们都可以直接得到它们的进程ID,但是现实是我们不能直接进行获取,而是通过父进程获取其子原创 2014-10-04 17:10:40 · 520 阅读 · 0 评论 -
mmap系统调用
mmap系统调用(功能)void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset )内存映射函数mmap, 负责把文件内容映射到进程的虚拟内存空间, 通过对这段内存的读取和修改,来实现对文件的读取和修改,而不需要再调用read,write等操作。addr:指原创 2014-11-24 13:22:25 · 631 阅读 · 0 评论 -
mmap设备操作
mmap设备操作映射一个设备是指把用户空间的一段地址关联到设备内存上。当程序读写这段用户空间的地址时,它实际上是在访问设备。mmap设备方法需要完成什么功能?mmap方法是file_oprations结构的成员,在mmap系统调用发出时被调用。在此之前,内核已经完成了很多工作。mmap设备方法所需要做的就是建立虚拟地址到物理地址的页表。int (*mmap)原创 2014-11-24 13:58:22 · 620 阅读 · 0 评论 -
枚举类型
枚举类型的定义和枚举变量的说明 1. 枚举的定义枚举类型定义的一般形式为: enum 枚举名{ 枚举值表 }; 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。 例如: 该枚举名为 weekday,枚举值共有 7 个,即一周中的七天。凡被说明为 weekday 类型变量的取值只能是七天中的某一天。 2. 枚举变量的声明 如同结构和联合一样,枚举变量也可转载 2015-07-07 09:34:03 · 736 阅读 · 0 评论 -
理解C语言-第21课-指针基础
第21课-指针基础1.变量回顾既然程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?#include int main(){ int i = 5; int* p = &i; printf("%d, %08X\n", i, p); *p = 10;//等价于i =原创 2014-09-15 19:29:09 · 818 阅读 · 0 评论 -
/etc/ld.so.conf文件
原文地址:http://blog.sina.com.cn/s/blog_4cce4f6a0100ms6f.html 作者:方人也 Linux 系统上有两类根本不同的 Linux 可执行程序。 第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数。换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。第二类是动态链接的可执行程序。 接下来我们比较一下转载 2016-03-30 20:03:09 · 810 阅读 · 0 评论 -
位运算之位操作符
4.2.1.1 位与&(1)注意:位与符号是一个&,两个&&是逻辑与。(2)真值表:1&0=0 1&1=1 0&0=0 0&1=0(3)从真值表可以看出位与操作的特点是,只有1和1位与结果为1,其余全是0。(若1表示真,0表示假,则全是真才为真,只有有一个为假就为假)(4)位与与逻辑与的区别:位与的时候两个操作数是按照二进制位彼此对应相与的,逻辑与是两个操作数作为整体相与的。(举例原创 2016-02-19 22:32:37 · 3121 阅读 · 0 评论 -
解决Clock skew detected.
问题:[ 92%] Building C object CMakeFiles/dyna.x.dir/mystrings/StrEdit.c.o[100%] Building C object CMakeFiles/dyna.x.dir/mystrings/mystring.c.oLinking C executable dyna.xmake[1]: Warning: File `S转载 2016-04-06 14:09:09 · 1536 阅读 · 0 评论 -
CMake交叉编译配置
from:http://www.tuicool.com/articles/yAFnQ3很多时候,我们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译。即在你host宿主机上要生成target目标机的程序。里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等,我今天仅仅简单介绍下相关CMake在面对交叉编译的时候,需要做的一些准备工作。CMake给交叉编译预转载 2016-04-14 10:21:06 · 3155 阅读 · 2 评论 -
CMake Cross Compiling
Cross compiling is supported by CMake starting with version 2.6.0.Cross compiling means that the software is built for a different system than the one which does the build.This meansCMake cannot转载 2016-04-14 10:22:33 · 2432 阅读 · 0 评论 -
vim配置及插件安装管理(超级详细)
1写在前面 Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用的IDE是何等的重要啊, 估计很多人就是卡在这个门槛上了, "工欲善其事, 必先利其器"嘛, 我想如果有一个很好用的IDE, 那些Linux牛人也会欢迎的. 这都是劳动人民的美好愿望罢了转载 2016-04-20 20:51:41 · 521 阅读 · 0 评论 -
C语言一些常用的“位”操作函数
From:http://blog.csdn.net/dijkstar/article/details/7420515这些函数操作“位”,经常用到:[cpp] view plain copy//将双字节中某一位置位 void SetN1(unsigned short *pBuf, int n) { (*pBuf) |=转载 2016-06-27 15:58:23 · 1439 阅读 · 0 评论 -
linux串口编程 非规范模式 read()问题
在linux下编写终端程序时,有规范模式 ,非规范模式(原始模式特殊的非规范模式)之分。不用于终端,而是在串口这种使用情况下,一般设置为原始模式(非规范的一种特殊情况)。但用read()函数,希望从串口接收指定的数量的字符时,往往接收到的实际字符数,都与指定的不同。如本人用read()希望接收 10 bytes的数据,但实验后发现,分了几次才接收到,俩次接收2bytes ,两次接收3bytes转载 2016-07-12 13:43:36 · 6644 阅读 · 0 评论 -
linux 串口阻塞与非阻塞参数设置
在串口设置中,有以下两个参数可以决定是否阻塞。在打开串口时不加O_NODELAY,可用下面的第二种方法,来进行阻塞/非阻塞的设定 c_cc[VTIME] 非规范模式读取时的超时时间(单位:百毫秒),可以这么理解,从接收到后一个字节开始计时,如果超时,则退出READ c_cc[VMIN] 非规范模式读取时的最小字符数,设为0则为非阻塞,如果设为其它值则阻塞,直到读到到对转载 2016-07-14 14:19:37 · 1459 阅读 · 0 评论 -
arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
命名规则交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]arch - 体系架构,如ARM,MIPSvendor - 工具链提供商os - 目标操作系统eabi - 嵌入式应用二进制接口(Embedded Application Binary Interface)根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如转载 2016-07-15 16:58:27 · 565 阅读 · 0 评论 -
pkg-config的安装配置及其作用
最近在安装OpenCV1.0的时候需要用到pkg-config。(一)、 首先到网上下载pkgconfig,地址: http://download.chinaunix.net/download/0009000/8174.shtml ,我下的版本是 pkgconfig-0.17.2.tar.bz2 ,在linux系统下解压以后,cd进入解压文件夹,使用命令gedit INSTAL转载 2016-07-17 19:59:05 · 28373 阅读 · 0 评论 -
如何从应用程序进入linux内核
消息队列(报文队列)实践到内核 1--消息队列(报文队列)实践到内核--消息队列的创建http://blog.csdn.net/Embeddedfly/archive/2011/05/11/6411650.aspx 2--消息队列(报文队列)实践到内核--消息的发送http://blog.csdn.net/Embeddedfly/archive/2011/05/11/641转载 2016-06-21 13:39:10 · 784 阅读 · 0 评论 -
在ubuntu 16.04安装ROS Kinetic
ROS_Kinetic系列学习(一),在ubuntu 16.04安装ROS Kinetic。ubuntu16.04 已经发布一个月了,ROS的Kinetic也已经发布,需要了解ROS发行版及支持维护的时间等,可以参考如下网页:http://wiki.ros.org/Distributions+ubuntu 16.04对中文支持很好,直接支持中文输入,使用体验不错。1. ubun转载 2016-09-18 16:08:40 · 39657 阅读 · 2 评论 -
ROS基础内容
在开始基础内容之前,假定您已经完成了ROS kinetic版本的安装,如果没有请参考ROS kinetic安装说明。1. 环境变量在使用ROS期间,一定要确保环境变量配置正确,通常是source不同的setup.bash。~$ source /opt/ros/kinetic/setup.bash如果您在查找和使用ROS功能表遇到问题,请检查您的脚本环境,可以使用以下转载 2016-09-18 16:10:50 · 1904 阅读 · 0 评论 -
opencv视频操作基础---VideoCapture类
opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API。1.VideoCapture类的构造函数:C++: VideoCapture::VideoCapture();C++: VideoCapture::VideoCapture(const string& filename);C++: VideoCapture::VideoCaptur...原创 2016-11-28 18:02:31 · 115329 阅读 · 12 评论 -
error: unknown type name 'class' 的解决方法
error: unknown type name 'class' 的解决方法,有需要的朋友可以参考下。编译工程时出现以下错误:error: unknown type name 'class'error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token原因:C文件inc转载 2016-12-05 10:11:04 · 41280 阅读 · 0 评论 -
opencv调整图像亮度与对比度
图像变换的操作一般可以分为下面两种: 1.基于邻域操作进行区域变换,比如卷积操作、特征提取、图像梯度计算、角点检测、图像模糊与蜕化等。 2.基于点操作进行像素的变换,比如图像亮度于对比度的调整。 下面我们对图像的亮度与对比度的调节进行讨论。 亮度与对比度的调节主要基于下面的公式,其中g(i,j)为处理前的图像,f(i,j)为处理后的图像: g(i,原创 2016-12-08 10:17:37 · 2411 阅读 · 0 评论 -
在opencv中为程序界面添加Trackbar
在opencv中经常遇到调节参数的问题,比如我们在用高斯滤波器进行图像滤波的时候,需要不断调整滤波器内核的大小,来达到一个适合的滤波效果。如果直接在程序源码中进行修改高斯内核的大小,然后进行编译、运行观察图像效果,这是十分不方便的,而且不够直观。为了解决这个问题opencv中提供了Tracebar,也就是滑动条,它依附于窗口而存在,可以实现参数的动态调整。 下面是创建Tracebar的函数原原创 2016-11-25 17:05:00 · 1299 阅读 · 0 评论 -
opencv鼠标操作
opencv中的鼠标操作和滑动条的消息映射方式很类似,都是通过一个中介函数配合一个回调函数来实现。opencv中提供了setMouseCallback()函数,这个函数的作用是为指定的窗口设置鼠标回调函数(跟createTrackBar函数一样都是依附于指定的窗口),通过这个函数可以实现画图的功能。下面是这个函数的原型:void setMouseCallback(const string& w原创 2016-11-26 11:31:38 · 2291 阅读 · 0 评论 -
System V IPC
最初的UNIX系统存在信号、管道和命名管道等基本的进程间通讯机制,System V出现后引入了三种高级进程间通讯机制:消息队列、共享内存和信号量。 新引入的三个通讯机制是以对象的形式存在的,被称为IPC对象,它们存在于内核而不是文件系统中,由用户控制释放(由用户管理IPC对象的生命周期,用户不释放IPC对象,它们就会永远存在于内核之中,除非重启计算机),不像管道一样由内核控制释放。原创 2016-11-24 21:21:51 · 326 阅读 · 0 评论 -
Makefile 中的 $@, $^, $< , $? 符号
Makefile $@, $^, $$@ 表示目标文件$^ 表示所有的依赖文件$$? 表示比目标还要新的依赖文件列表如一个目录下有如下文件:$ lshello.c hi.c main.c Makefile按照 Makefile 规则规规矩矩的写:main: main.o hello.o hi.o gcc原创 2016-12-22 14:15:19 · 605 阅读 · 0 评论 -
使用eclipse编译含有C++11特性的代码
使用eclipse编译含有C++11特性的代码,总是出错。最后在stackoverflow找到了解决方法。1. 右击项目,选择Properties。2. C/C++ Build --> Settings --> Tool Settings --> GCC C++ Compiler --> Miscellanous。在右边的Other Flags中把 "-std=c++0x" 引号中的内容放转载 2016-12-23 08:31:44 · 422 阅读 · 0 评论 -
C++11多线程
C++11中引入了一个用于多线程操作的thread类,简单多线程示例:[cpp] view plain copy print?#include #include #include using namespace std; void thread01() { for (i转载 2017-01-17 08:11:16 · 304 阅读 · 0 评论 -
c++继承的访问控制
//1.子类拥有父类所有的成员变量和成员方法(除了构造和析构之外的成员方法)。但是这些成员的访问属性,在//派生过程中是可以调整的。//2.子类就是一种特殊的父类//3.子类对象可以当作父类对象使用(比如父类做函数参数,可以传入子类对象)//4.子类可以拥有父类没有的方法和属性//public修饰的成员变量、方法,在类的内部和外部都能使用//protected修饰的成员变量原创 2017-03-17 22:25:48 · 295 阅读 · 0 评论