C/C++
文章平均质量分 87
~晓广~
这个作者很懒,什么都没留下…
展开
-
使用74HC595D GPIO控制8颗LED发光二极管
74HC595D原创 2023-10-25 09:52:45 · 584 阅读 · 0 评论 -
ubuntu GPIO口 C++
GPIO原创 2023-10-25 09:44:25 · 287 阅读 · 0 评论 -
qt 学习 信号和槽
如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,将想要处理的信号和自己的一个函数(槽函数(slot))绑定并处理这个信号。他们的参数都是可有可无,但如果有参数,对于可以相连接的信号函数和槽函数,信号函数的参数个数不能少于槽函数,而且对应的参数的数据类型必须一致。一个信号可以连接多个槽(信号)函数,并且被连接的槽(信号)函数的触发顺序是随机的,不能控制。而槽不仅可以是类的成员函数,还可以是静态函数、全局函数和 Lambda 表达式。信号连接信号不仅可以和槽连接,也可以和信号连接。原创 2023-06-11 13:08:58 · 190 阅读 · 0 评论 -
qt 学习 对象树
这相当于,在创建 QWidget 对象时,可以提供其父对象,也就是 QWidget 对象所处于的那个 QObject 对象,我们创建的这个 QWidget 对象会自动添加到其父对象的 children() 列表里。按照对象创建顺序,会先析构父对象 window,再析构子对象 quit,而在析构父对象 window 时,已经将子对象 quit 析构了,接下来又要第二次析构 quit,C++ 不允许调用两次析构函数,因此,程序崩溃了。在内存管理方面,对象的构造是自顶向下的,而析构是从底端开始的,自底向上。原创 2023-06-11 13:07:20 · 152 阅读 · 0 评论 -
qt 5.15 安装详解
整个Qt环境安装过程大约花了一个小时,完成后,在Windows的『开始』菜单中也可以找到对应的快捷方式。原创 2023-06-11 13:01:13 · 11060 阅读 · 5 评论 -
OpenCV c++ 角点检测
1.角点检测void cornerHarris( InputArray src, OutputArray dst, int blockSize,int ksize, double k, int borderType = BORDER_DEFAULT ); src:输入8bit 单通道灰度Mat矩阵dst:用于保存Harris角点检测结果,32位单通道,大小与src相同blockSize:滑块窗口的尺寸ksize:Sobel边缘检测滤波器大小k:Harries中间原创 2021-08-23 13:48:17 · 564 阅读 · 0 评论 -
OpenCV c++ 角点检测、人机交互
1.角点检测 void cornerHarris( InputArray src, OutputArray dst, int blockSize,int ksize, double k, int borderType = B...原创 2021-08-23 13:41:21 · 175 阅读 · 0 评论 -
OpenCV(11)边缘检测、轮廓绘制、简单平移距离测量 C++
1.边缘检测 原文链接:http://blog.sina.com.cn/s/blog_154bd48ae0102weuk.html 边缘检测的一般步骤: 1.滤波 边缘检测的算法主要是基于图像的一阶和二阶导数。但是导数通常对噪声很敏感,所以首先要用滤波器降低噪声。常见的滤波方法主要是高斯滤波。 2.增强 增强边缘的基础是确定图像各点领域强度的变化值。增强算法可以将图像灰度点邻域强度值有显著变化的点凸现出来,在具体计算的过程中,可以通过计算梯度幅值来确定。 3.检测 经过增强的图像,往往领域中有很多点的梯度原创 2021-08-23 13:39:55 · 4642 阅读 · 1 评论 -
OpenCV(10)图像直方图、后投影、简单数字识别 C++
1.图像直方图 直方图简单来说就是图像中每个像素值的个数统计,比如说一副灰度图中像素值为0的有多少个,1的有多少个……直方图是一种分析图像的手段: 1.1.(cv :: calcHist)计算直方图 CV_EXPORTS void calcHist( const Mat* images, int nimages, const int* channels, InputArray mask, Outpu原创 2021-08-23 13:33:57 · 529 阅读 · 0 评论 -
OpenCV(9)几何形状识别、ROI操作、图像去噪 C++
1.几何形状识别 #include <opencv2/opencv.hpp>#include <iostream>#define MATCHMETHOD TM_SQDIFF_NORMED//宏定义匹配模式using namespace cv;using namespace std;int main(int argc, char argv){Mat src = imread("./image/test10.jpg");Mat src_gray, binary;Mat原创 2021-08-22 15:20:30 · 1662 阅读 · 0 评论 -
OpenCV(8)像素归一化、图像二值化 C++
1.(cv :: normalize)范数归一化 归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。 CV_EXPORTS_W void normalize( InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0, int norm_type = NORM_L2, int dtype = -1, InputArray mask原创 2021-08-22 15:19:11 · 3694 阅读 · 0 评论 -
OpenCV(7)离散傅里叶、图像矫正 C++
1.离散傅里叶变换 作用:得到图像中几何结构信息 结论:傅里叶变换后的白色部分(即幅度较大的低频部分),表示的是图像中慢变化的特性,或者说是灰度变化缓慢的特性(低频部分)。 傅里叶变换后的黑色部分(即幅度低的高频部分),表示图像中快变化的特性,或者说是灰度变化快的特性(高频部分)。 1.1.(cv :: dft)离散傅里叶变换 void dft(InputArray src, OutputArray dst, int flage=0, int nonzeroRow=0) src:输入矩阵,可以为实原创 2021-08-22 15:18:04 · 762 阅读 · 0 评论 -
OpenCV(6)绘图、Blob分析、在图像上显示文本 C++
1.基本绘图 (cv :: Point)定义图像中的2D点 Point pt; pt.x = 10; pt.y = 8; (cv :: Scalar)用于传递像素值 如果我们被要求一个颜色参数,我们给出: Scalar( a, b, c ) 我们将定义一个BGR颜色,如:Blue = a,Green = b和Red = c (cv :: setTo)将所有或部分数组元素设置为指定的值。 Mat& setTo(InputArray value, InputArray mask=noAr.原创 2021-08-22 15:16:15 · 999 阅读 · 0 评论 -
OpenCV(5)通道分离合并 色彩空间转换 像素值统计 C++
1. OpenCV通道分离与合并 1.1.(cv :: split) 把一幅图像各个通道分离开 CV_EXPORTS_W void split(InputArray m, OutputArrayOfArrays mv); m:输入多通道阵列。输入一副多通道图片mv:数组输出向量;如果需要,将重新分配数组本身。 1.2.(cv :: merge) 把一幅图像各个通道合并 CV_EXPORTS_W void merge(InputArrayOfArrays mv, OutputArray dst).原创 2021-08-22 15:14:50 · 180 阅读 · 0 评论 -
OpenCV(4)矩阵掩码操作/像素算数、逻辑操作 C++
1. 矩阵上的掩码操作 1.1.(cv :: filter2D)矩阵上的掩码操作 1.2.(cv :: CV_Assert) 确保输入图像数据是unsigned char格式 图像对比度增强方法的问题。基本上我们要为图像的每个像素应用以下公式: I(i,j) = 5 * I(i,j) – [ I(i-1,j) + I(i+1,j) + I(i,j-1) + I(i,j+1)], I(i,j) :表示目标像素点;i :表示像素点的横坐标;j :表示像素点的纵坐标I(i-1,j) 、I(i+1,原创 2021-08-22 15:12:41 · 523 阅读 · 0 评论 -
OpenCV(3)程序时间测量、色彩映射、LUT、图像反转 C++
1. 如何使用OpenCV扫描图像,查找表格和时间测量 2. (cv::getTickCount) 和 (cv::getTickFrequency)计时函数 double t1 = (double)getTickCount(); //计时开始... //需要计时的程序double t2 = (double)getTickCount(); //计时结束cout<<"time:"<<(t2-t1)/(getTickFrequency())<<end原创 2021-08-22 15:10:10 · 366 阅读 · 0 评论 -
OpenCV(2)Mat-基本图像容器 C++
1.Mat-基本图像容器 我们有多种方式从现实世界中获取数字图像:数码相机,扫描仪,计算机断层扫描和磁共振成像等等。在任何情况下,我们(人类)看到的都是图像。然而,当将其转换为数字设备时,我们记录的是图像中每个点的数值。 Mat A, C; // creates just the header partsA = imread(argv[1], IMREAD_COLOR); // here we'll know the method used (a.原创 2021-08-22 15:08:19 · 314 阅读 · 0 评论 -
OpenCV(1)基本操作、检测数量 C++
<h2><a id="1OpenCV__0"></a>1.OpenCV 图像加载,显示,修改和保存</h2> - (cv :: imread)加载图像 - (cv :: namedWindow)创建一个名为OpenCV的窗口 namedWindow(“OpenCV窗口”, 2); //值为2时,可以鼠标调整窗口大小 - (cv :: imshow)在OpenCV窗口中显示图像...原创 2021-08-22 15:05:56 · 745 阅读 · 0 评论 -
visual studio配置OpenCV环境
<h2><a id="1OpenCV_0"></a>1.下载安装配置OpenCV</h2> 工具/原料:opencv-4.5.2-vc14_vc15 、Visual Studio 2019 OpenCV下载地址:https://sourceforge.net/projects/opencvlibrary/files/opencv-win/ 1.1. 环境变量配置path: 在系统变量的 path变量里面添加:E:...原创 2021-08-22 15:03:35 · 461 阅读 · 0 评论 -
Qt配置OpenCV教程
win10系统Qt5.12.9配置OpenCV4.5.1库教程 Qt,OpenCV,Cmake详细下载安装教程 软件准备 首先要说的是装软件还是装最新的好,不用考虑各种软件的版本对应问题,都是最新版的情况下它们互相之间一定是兼容的,下边具体来说下需要的几个软件。 64位win10系统 Qt 5.12.9 Cmake 3.18.0 OpenCV 4.5.1 以下叙述顺序即为安装配置顺序 Qt Download 国内镜像网站 这里给大家推荐几个国内著名的 Qt .原创 2021-08-21 09:52:51 · 281 阅读 · 0 评论 -
CMakeLists.txt 语法介绍
一、Cmake 简介 cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。 二、常用命令 1. 指定 cmake 的最小版本 cmake_minimum_required(VERSION 3.4.1) 这行命令是可选的,我们可以不写这句话,但在有些情况下,如果 CMakeLists.txt 文件中使用了一些高版本 cmake 特有的一些命令的时候,就需要加上这样一行,提醒用户升级到该版本之后再执行 cma原创 2021-08-20 15:26:53 · 144 阅读 · 0 评论 -
C++提高编程(三)
本阶段主要针对C++泛型编程和STL技术做详细讲解,探讨C++更深层的使用1 模板 1.1 模板的概念 模板就是建立通用的模具,大大提高复用性 例如生活中的模板 一寸照片模板: PPT模板: 模板的特点: 模板不可以直接使用,它只是一个框架模板的通用并不是万能的1.2 函数模板 C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 1.2.1 函数模板语法 函数模板作用: 建立一个通用函数,其函数返回值类型和形参类型转载 2021-08-20 15:23:07 · 163 阅读 · 0 评论 -
C++核心编程(二)
本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。 1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区意义: 不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程 1.1 程序运行前 在程序编译后,生成了exe可执行程序,原创 2021-08-20 15:19:52 · 219 阅读 · 0 评论 -
C++基础入门(一)
1 C++初识 1.1 第一个C++程序 编写一个C++程序总共分为4个步骤 创建项目创建文件编写代码运行程序1.1.1 创建项目 Visual Studio是我们用来编写C++程序的主要工具,我们先将它打开 1.1.2 创建文件 右键源文件,选择添加->新建项 给C++文件起个名称,然后点击添加即可。 1.1.3 编写代码 #include<iostream>using namespace std;int main() {cout &原创 2021-08-20 15:16:47 · 282 阅读 · 0 评论 -
Qt modbus使用详解
目录 一、Modbus协议通信过程 1.1 主机对从机写数据操作(0x06) 1.2 主机对从机读数据操作(0x03) 1.3 Modbus的CRC校验 二、在Qt中使用QModbus读写数据 2.1 部署准备——头文件中(.h) 2.2 部署准备——cpp文件中 2.3 modbus的使用——写函数 2.4 modbus的使用——读数据 2.5 额外——涉及的数据类型说明 一、Modbus协议通信过程 Modbus能实现的功能较多,理解了如下2个操作,基本算掌握了Modbus 8原创 2021-08-20 09:29:16 · 18269 阅读 · 2 评论 -
OpenCV单目视觉定位实现方法
OpenCV单目视觉定位(测量)系统 The System of Vision Location with Signal Camera Abstract:This passage mainly describes how to locate with signalcamera,which bases on OpenCV library. Key words: OpenCV; Locate;Signalcamera 摘 要:本文主要描述的是利用开源计算机视觉库OpenCV实现单目视觉定位系统。原创 2021-08-20 08:41:34 · 4785 阅读 · 1 评论 -
CANopen高级协议详解
目录 简介CAL(CAN Application layer)CANopenCANopen对象字典(CANopen Object Dictionary)CANopen communication管理消息(Administrative message)服务数据对象(Service Data Object,SDO)过程数据对象(Process Data Object,PDO)预定义消息或特殊功能对象(Predefined messages or Special Function Objects)同步(Syn.原创 2021-08-20 08:40:57 · 14858 阅读 · 2 评论 -
CAN与CANOPEN的基本概念
CAN(Controller Area Network, 控制器局域网络)是由博世开发的一种现场总线,首先应用在汽车领域。由于它的低成本和可靠性,现在被广泛应用在工业测控和工业自动化领域。由于工作的关系,自己接触CAN比较多所以总结一下分享给大家。 参考 http://www.can-cia.org/ http://www.canopensolutions.com/ CAN Specification 2.0, Part A原创 2021-08-19 13:12:54 · 1349 阅读 · 0 评论 -
EtherCAT总线通信Freerun、SM、DC三种同步模式分析
EtherCAT总线三种同步模式分析 一、 分布式时钟作用 使所有EtherCAT设备使用相同的系统时间,从而控制各设备任务的同步执行。 二、 名词解析 1、 现场总线高速数据传递:即主站周期的向从站发送输出信息并周期地读取从站的输入信息 2、 Output Valid:输出有效,指的是主站输出有效,表示的是从站将数据帧中对应数据从同步管理器通道上下载下来的一个过程。 3、 Input Latch:输入锁存,锁存信号(LATCH0/1)用于给外部信号打上时间戳(time stamp) (在DC模式下原创 2021-08-19 13:08:57 · 7784 阅读 · 1 评论 -
CanOpen通信----PDO与SDO
CanOpen通信----PDO与SDO 服务数据对象SDOSDO 传输框架SDO 传输报文SDO 加速写传输报文SDO 加速读传输报文SDO分段读传输报文 过程数据对象PDOPDO 传输框架PDO 对象PDO 通信参数PDO 的 CAN 标识符PDO 的传输类型禁止时间事件计时器 PDO 映射参数 服务数据对象SDO 服务数据对象 (SDO) 通过对象索引和子索引与对象字典建立联系, 通过SDO 可以读取对象字典中的对象内容, 或者在允许的情况下修改对象数据。 SDO 传输原创 2021-08-19 13:06:41 · 4781 阅读 · 0 评论 -
CanOpen的SDO、PDO简单通信使用
CanOpen部分笔记: CanOpen的一些简单的使用记录。为了简单明了,假设现在是用CAN盒子向使用CanOpen协议的设备通信(假设设备地址ID为0x01)。 SDO通信: 如果想要读取设备某个参数。则使用 此数据格式发送。 比如读取设备索引为0x60c1,子索引0x01的参数。则发送如下参数: 发送:0x601 40 c1 60 01 00 00 00 00 接收:0x581 43 c1 60 01 01 02 03 04 其中发送中的0x40表示读取数据,接收中的0x43表示接收到原创 2021-08-19 13:03:36 · 8500 阅读 · 1 评论 -
CANopen--基于DS402协议的伺服电机原点回零模式
硬件:Copley 驱动器ACJ-055-18+Maxon DCX-35L电机 1、原点回零方式简介: 有几种原点回零方法,每种方法建立:原点参考(限位或原点开关转换或编码器索引脉冲)运动方向以及索引脉冲与限位器原点开关之间的关系。 图 1 回零过程图 原点回零模式用于寻找机械原点, 并定位机械原点与机械零点的位置关系。原点回零成后, 电机停止位置为机械原点(HomePosition), 通过设置 607Ch, 可以设定机械原点与机械零点(ZeroPosition)的关系:原创 2021-08-19 13:00:49 · 1807 阅读 · 0 评论 -
CANOPEN使用心得
canopen 简单提要can总线 can特点:多主控制、高达1M通讯速度、通讯校验、 错误检测处理及恢复等,can总线通讯接口规定了CAN协议的物理层和数据链路层功能。 canopen协议 canopen协议属于应用层协议,是由一系列子协议组成,分为通讯子协议和设备子协议,通讯子协议例如CIA 301子协议对canopen网络的架构进行了规范 ,针对某些特定的对象字典中的数据对象规定了相应的功能。设备子协议目前在电机控制中主要使用CIA 402设备子协议,CIA 402子协议定义了电机原创 2021-08-19 12:54:03 · 4469 阅读 · 0 评论 -
【C/C++】STL详解
在c++中存在一个从const char*到string的隐式类型转换,却不存在从一个string对象到C_string的自动类型转换。对于string类型的字符串,可以通过c_str()函数返回string对象对应的C_string.通常,程序员在整个程序中应坚持使用string类对象,直到必须将内容转化为char*时才将其转换为C_string.原创 2021-08-19 11:45:21 · 1471 阅读 · 0 评论