C/C++
文章平均质量分 79
来灵
抬头走路,低头做事。
展开
-
C++调用OpenCV实现图像阈值处理
本节我们一起探索下使用OpenCV,如果对图像进行阈值处理,其中包括简单的阈值处理、自适应阈值处理和Otsu阈值处理。原创 2022-12-10 10:38:17 · 2945 阅读 · 0 评论 -
Windows系统CMake编译Opencv4.6.0源码,支持contrib库
本篇详细介绍了在Windows系统上,如何使用CMake编译OpenCV4.6.0源码(包含contrib4.6.0模块),生成对应的库文件和头文件。为使用C++基于OPenCV开发人脸识别等功能做好准备。原创 2022-11-11 17:19:24 · 4135 阅读 · 13 评论 -
C++调用OpenCV实现图像反转处理
本节介绍了用C++调用OpenCV接口,分别对彩色图像和灰度图像做发色处理的过程,包括概念介绍及代码实现等。原创 2022-10-09 16:08:23 · 3689 阅读 · 0 评论 -
Win10系统C++调用OpenCV实现网络摄像头录像和抓拍图片
前边文章介绍了在WIN10系统上,分别用C++和Python调用OpenCV接口,播放本地和网络摄像头视频。本篇我们来看一下,用C++如何调用OpenCV接口,打开网络摄像头的视频,对其进行录像,并抓拍图片。原创 2022-09-21 17:13:08 · 2381 阅读 · 0 评论 -
基于libevent的C++高并发、易扩展HTTP服务迭代之路
在项目或产品开发中,需要用C++实现一个高并发且易扩展的HTTP Server,那么我们可以基于libevent来做这件事情。Libevent提供了HTTP Server等组件,并且支持多线程编程。下面我们一起来看一下实现过程。原创 2022-09-06 16:42:18 · 2969 阅读 · 1 评论 -
Win10系统,用C++调用OpenCV接口,播放本地视频文件,播放本地和网络摄像头
本篇介绍在WIN10种,用C++如何调用OpenCV接口,打开和播放本地视频文件,打开本地、网络摄像头并播放视频。原创 2022-09-01 15:52:50 · 5051 阅读 · 0 评论 -
Win10+OpenCV4.6.0之开发环境(VS2022)配置入门
本文详细介绍了在Win10系统中安装配置OpenCV4.6.0开发环境步骤,并用VS2022创建OpenCV的C++版测试程序,加载显示一张图片。原创 2022-08-28 21:37:33 · 10692 阅读 · 30 评论 -
VS2019编译boost_1_79,生成32位和64位静态库
使用VS2019编译boost_1_79的32位和64位静态库记录。原创 2022-08-08 16:43:46 · 3202 阅读 · 4 评论 -
记Ubuntu18.04将gcc4.8.5升级到gcc7
记Ubuntu18.04将gcc4.8.5升级到gcc7原创 2022-07-13 09:20:49 · 1315 阅读 · 0 评论 -
Centos7编译安装ONVIF框架代码
采用从ONVIF官网下载的最新版本WSDL(Ver.21.12)文件,在Centos上用gsoap_2.8.119编译生成ONVIF框架代码(C++版)原创 2022-06-18 18:33:24 · 944 阅读 · 1 评论 -
常用makefile模板
makefile常用模板# 指令编译器和选项# GCC编译选项CFLAGS参数# 选项 说明# -c 用于把源码文件编译成 .o 对象文件,不进行链接过程# -o 用于连接生成可执行文件,在其后可以指定输出文件的名称# -g 用于在生成的目标可执行文件中,添加调试信息,可以使用GDB进行调试# -Idir 用于把新目录添加到include路径上,可以使用相对和绝对路径,“转载 2022-05-09 18:38:31 · 648 阅读 · 0 评论 -
centos7.9使用gn+ninja编译程序
1 编译ninja和gn请参见上篇文章centos7.9编译安装构建系统gn+ninja2 编译demo程序当ninja和gn都编译安装好之后,就可以来感受一下它们的编译乐趣了。下边以gn目录examples下的例子验证一下。1,进入代码路径cd ./gn/examples/simple_build2,查看simple的代码文件ll –a3,查看simple代码目录树tree4,使用gn和ninja编译simplegn gen out/ninj原创 2022-05-07 17:07:19 · 990 阅读 · 0 评论 -
Centos7.9编译安装clang12.0.0
环境Win10主机+VMware15.5+Centos7.9登录用户:root从LLVM官网文档得知,编译clang12.0.0,需要依赖以下几个组件Getting Started with the LLVM System — LLVM 12 documentation原创 2022-04-29 16:27:19 · 6128 阅读 · 11 评论 -
centos7.9编译安装构建系统gn+ninja
1前言环境Win10主机+VMware15.5+Centos7.9登录用户:rootNinja 是Google推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度。Gn,其详细名称猜测为generate ninja,是专用于生成ninja文件的元构建系统。2准备工作2.1准备编译环境yum -y install git automake libtool2.2编译安...原创 2022-05-05 19:05:13 · 3685 阅读 · 2 评论 -
Win10使用VC2019编译Qt5.15.3源码记录
1,前记从QT官网了解到,Qt 5.15.3 LTS作为一个补丁版本,没有增加任何新的功能,提供了错误修复和一些其他改进。与 5.15.2 相比,包含了近 250 个错误修复。可惜的是,对开源用户,官网目前没提供离线和在线安装包,只能通过下载源代码,自己编译。2,编译环境准备2.1,源码下载可以从QT官网下载,速度太慢。建议从中国科学技术大学镜像网站下载,速度超级快。1G的镜像文件,分分钟就下载完了。相当给力!http://mirrors.ustc.edu.cn/qtprojec原创 2022-04-26 19:28:43 · 1128 阅读 · 0 评论 -
如何避免使用CreateThread函数导致的内存泄露
点击打开链接前阵子翻了翻候杰老师翻译的那本Win32多线程的书,老书了,很经典。 书里提到,当使用C/C++的时候,有些情况下CreateThread会导致内存泄露,建议使用_beginthread和_beginthreadex。这种泄露网上也有不少帖子在讲。 事实上,这种泄露的可能是存在的,但是只要稍微注意一下,是可以找到方法避免的。原创 2015-06-09 13:39:01 · 4829 阅读 · 0 评论 -
C++ STL源码剖析
http://www.cnblogs.com/lfsblack/archive/2012/11/10/2764334.html转载 2016-11-19 10:49:20 · 1634 阅读 · 0 评论 -
如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
http://www.oschina.net/translate/valgrind-memcheck系统编程中一个重要的方面就是有效地处理与内存相关的问题。你的工作越接近系统,你就需要面对越多的内存问题。有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦。所以,在实践中会用到很多工具来调试内存问题。在本文中,我们将讨论最流行的开源内存管理框架 VALGRIND转载 2017-08-15 16:19:16 · 428 阅读 · 0 评论 -
用C++实现Win32事件对象,同步线程
在Win32环境下编写多线程应用程序,经常要用到事件对象Event,来进行线程同步。与其相关的一组API包括:CreateEvent,SetEvent,ResetEvent,WaitForSingleObject,和CloseHandle。关于这些API的功能以及参数意义等这里就不多说了。下边,我封装了一个事件对象类,以及测试代码。已由本人在VS2005环境下编译,测试通过。MyEvent.h原创 2011-12-16 19:33:14 · 4843 阅读 · 1 评论 -
用select模式收发处理数据(跨平台)
本Demo程序模拟C/S传输数据。采用select模式,分别实现了一个客户端小程序和服务端小程序。已在VC2005和Fedroa 13下测试通过。因时间有限,功能简单,欢迎交流,学习! main.cpp#include "Sock.h"/*** 传输数据格式* ___________ _____________* | |原创 2011-08-26 21:31:48 · 4509 阅读 · 0 评论 -
TLV 格式及编解码示例
TLV是一种可变格式,意思就是:Type类型, Lenght长度,Value值;Type和Length的长度固定,一般那是2、4个字节(这里统一采用4个字节);Value的长度有Length指定;编码方法:1. 将类型type用htonl转换为网络字节顺序,指针偏移+42. 将长度length用htonl转换为网络字节顺序,指针偏移+43.原创 2011-11-15 19:03:56 · 83669 阅读 · 3 评论 -
为什么使用API?什么情况下避免使用API?
原文链接 API(Application Programming Interface)提供了对某个问题的抽象,以及客户与解决该问题的软件组件之间进行交互的方式。组件本身通常以软件类库形式分发,它们可以在多个应用程序中使用。概括地说,API定义了一些可复用的模块,使得各个模块化功能块可以嵌入到终端用户的应用程序中去。你可以为自己、你所在机构中的其他工程师或大型开发社区编写API。它可以小...原创 2013-07-24 11:54:17 · 3179 阅读 · 2 评论 -
Linux平台上用C++实现多线程互斥锁
在上篇用C++实现了Win32平台上的多线程互斥锁,这次写个Linux平台上的,同样参考了开源项目C++ Sockets的代码,在此对这些给开源项目做出贡献的斗士们表示感谢! 下边分别是互斥锁类和测试代码,已经在Fedora 13虚拟机上测试通过。Lock.h#ifndef _Lock_H#define _Lock_H#include //锁接口类clas原创 2011-12-09 20:14:12 · 16526 阅读 · 5 评论 -
用C++实现多线程Mutex锁(Win32)
本文目的:用C++和Windows的互斥对象(Mutex)来实现线程同步锁。 准备知识:1,内核对象互斥体(Mutex)的工作机理,WaitForSingleObject函数的用法,这些可以从MSDN获取详情; 2,当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线原创 2011-12-07 20:38:57 · 30206 阅读 · 8 评论 -
模拟NTP协议实现时钟同步
Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。 NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。 NTP获得UTC的时间来源可以原创 2011-11-12 20:59:11 · 12454 阅读 · 3 评论 -
XML和TLV打包解包性能比较
在开发协议的时候,经常会碰到打包解包的问题,不同的项目,不同的平台环境下会要求使用不同的打包解包格式,比如PC(Windows,Linux),或嵌入式设备(Arm),本文就使用XML(TinyXml库)和TLV打包解包的性能,做以比较。 有关TinyXml和TLV的介绍,在之前的博客TinyXml 读写XML文件和TLV 格式及编解码示例中可以看到。这里就不多说了。下边着重介绍一下我做的原创 2011-11-27 12:41:08 · 6598 阅读 · 1 评论 -
使用Socket套接字绑定函数bind的一个细节
只要稍微接触Socket套接字进行过网络编程的人,对Socket客户端调用流程或服务端调用流程都会很熟悉,传输层协议采用TCP也好,或UDP也罢。但是要写好这套“固化”的流程代码,如果稍不小心,或缺乏经历,还是很容易犯错误的,尤其当项目程序在迭代开发过程中,功能越来越多,也越来越复杂的情况下。 就在前几天,我碰到了这样一个细节问题。 协议栈Demo程序中有个设备校时的功能,采用原创 2011-11-05 21:09:10 · 9557 阅读 · 1 评论 -
用C读取INI配置文件
在Windows下可以用GetPrivateProfileString或GetPrivateProfileInt方便读取.ini配置文件内容,但是在Linux平台上就一筹莫展了。为了解决该问题,打算用C来读取.ini,即可不受平台的限制了。#define CONF_FILE_原创 2011-09-24 20:07:15 · 34525 阅读 · 12 评论 -
TinyXml 读写XML文件
使用Tinyxml创建和读取XML文件的优点:1,可在Windows和Linux中使用;2,方便易学,易用,可在http://sourceforge.net/projects/tinyxml/获取源代码。将其中的文件tinystr.h,tinyxml.h,tinystr.cpp,tinyxmlerror.cpp,tinyxmlparser.cpp和tinyxml.cpp拷贝到您的工程目录,即可方便使用。 下边我写了一个简单的测试程序,创建XML文件,之后从该文件中读取XML节点元素。#incl原创 2011-05-28 23:45:00 · 9613 阅读 · 3 评论 -
位运算之交换高位低位
<br />inline unsigned long fswap_16(unsigned long ul16)<br />{<br /> return((((unsigned long)(ul16) & 0xff00) >> 8) | (((unsigned long)(ul16) & 0x00ff) << 8));<br />}<br /> <br />inline unsigned long fswap_32(unsigned long ul32)<br />{<br /> unsign原创 2010-10-15 17:16:00 · 4621 阅读 · 0 评论 -
Linux平台用C++实现事件对象,同步线程
前文在Win32平台上用C++实现了事件对象Event,对线程进行同步,以达到期望目的。这次在Linux平台上实现与之类似的事件对象。与其相关的一组API包括:pthread_mutex_init,pthread_cond_init,pthread_mutex_lock,pthread_cond_wait,pthread_mutex_unlock,pthread_cond_broadcast,pt原创 2011-12-17 19:44:46 · 7053 阅读 · 1 评论 -
互斥对象锁和临界区锁性能比较
在Win32平台上进行多线程编程,常会用到锁。下边用C++实现了互斥对象(Mutex)锁和临界区(CRITICAL_SECTION)锁,以加深理解和今后方便使用。代码已在VS2005环境下编译测试通过。Lock.h#ifndef _Lock_H#define _Lock_H#include //锁接口类class ILock{public: virtual ~ILock原创 2011-12-10 22:54:26 · 14880 阅读 · 9 评论 -
C C++问题
1 Malloc与new 的区别 1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限原创 2010-07-04 21:32:00 · 1984 阅读 · 2 评论 -
一个基于 osip 库的 UAC 和 UAS 的代码整理
来自:http://blog.chinaunix.net/uid-7684977-id-2569711.html /** * 一个使用了 osip 和 eXosip 库的 UAC 代理客户端的演示程序 * * - 只是简单的演示了使用了 osip 和 eXosip2 库的 UAC 代理客户端的如下几个功能: * * i 发起呼叫 INVITE 请求 * * h 挂断会话 *...原创 2012-11-06 18:59:51 · 2015 阅读 · 0 评论 -
Linux平台用C++封装线程读写锁
在Linux平台上已经有现成的线程读写锁pthread_rwlock_t以及相关API,现将这些API封装成与Win32平台上相同的接口,以便于编写跨平台程序。这些API包括pthread_rwlock_init,pthread_rwlock_rdlock,pthread_rwlock_tryrdlock,pthread_rwlock_wrlock,pthread_rwlock_trywrlock原创 2011-12-29 20:55:26 · 7268 阅读 · 0 评论 -
在Win32下用C++实现多线程读写锁
读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者。 现在Win32的API原创 2011-12-28 21:27:40 · 10376 阅读 · 2 评论 -
Linux平台用C++实现信号量,同步线程
使用Linux平台上现有的信号量sem_t相关的一组API,可以方便地进行线程同步。现在用pthread_mutex_t和pthread_cond_t相关的一组API实现信号量机制。这组API包括:pthread_mutex_init,pthread_cond_init,pthread_mutex_lock,pthread_cond_signal,pthread_mutex_unlock,pthr原创 2011-12-23 22:25:10 · 5212 阅读 · 0 评论 -
将Linux的信号量sem_t封装成事件对象
将信号量sem_t相关的一组API封装成Win32平台上的事件对象类之后,在Linux平台上就可以像使用事件对象那样,方便地进行线程同步了。class CEventImpl{protected: /* 创建匿名信号量 `bAutoReset true 人工重置 false 自动重置 */ CEventImpl(bool manualReset);原创 2011-12-24 20:51:54 · 4015 阅读 · 0 评论 -
用C++实现自己的内存池
打开浏览器,搜索了下内存管理的概念,百度百科中是这样定义的:内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。说到内存,与之紧密相联系的一个概念就是指针。回想起上学那会儿,自己对指针是即喜欢,又害怕。因为学好了指针,就可以学好C,继而学好C++,但面对那些晦涩的概念,和程序运行中一些莫名其妙的指针越界、内存泄露……原创 2011-12-14 21:27:45 · 16779 阅读 · 4 评论 -
用C++封装Win32信号量,同步线程
在Win32环境下编写多线程应用程序,也会常用到信号量Semaphore来进行线程同步。与其相关的一组API包括:CreateSemaphore,ReleaseSemaphore,WaitForSingleObject,和CloseHandle。关于这些API的功能以及参数意义等这里就不多说了。下边,我封装了一个信号量类,以及测试代码。已由本人在VS2005环境下编译,测试通过。MySemap原创 2011-12-20 21:07:01 · 4696 阅读 · 0 评论