自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

QtHalcon

在计算机视觉路上努力前行

  • 博客(46)
  • 资源 (18)
  • 收藏
  • 关注

原创 Linux线程取消

Linux线程可以取消其他线程,被取消的线程会被退出线程本身可以设置不被其他线程取消 相关函数int pthread_cancel(pthread_t thread); //同一进程的线程取消其他线程int pthread_setcancelstate(int state, int *oldstate);//设置线程取消int pthread_setcanceltype...

2018-09-28 14:09:39 962

原创 Linux信号处理方法signal,sigaction和 信号集

  信号的处理包括信号的发送、 捕获及信号的处理, 它们有各自相对应的常见函数。 发送信号的函数: kill()、 raise()。 捕捉信号的函数: alarm()、 pause()。 处理信号的函数: signal()、 sigaction()。信号处理的方法主要有两种, 使用 signal()和sigation()函数 使用信号集函数组下面分别介绍这两种处理方...

2018-09-27 18:32:59 1140

原创 Linux 进程间通信(七)消息队列

顾名思义, 消息队列就是一些消息的列表, 用户可以在消息队列中添加消息和读取消息等。从这点上看, 消息队列具有一定的 FIFO 特性, 但是它可以实现消息的随机查询, 比 FIFO具有更大的优势。 同时, 这些消息又是存在于内核中的, 由“队列 ID” 来标识。消息队列的实现包括创建或打开消息队列、 添加消息、 读取消息和控制消息队列 4 种操作,创建或打开消息队列使用的函数是 msgge...

2018-09-25 20:11:46 2600

原创 Linux 进程间通信(六)共享内存

可以说, 共享内存是一种最为高效的进程间通信方式, 因为进程可以直接读写内存, 不需要任何数据的复制。 为了在多个进程间交换信息, 内核专门留出了一块内存区, 这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。 因此, 进程就可以直接读写这一内存区而不需要进行数据的复制, 从而大大提高了效率。 当然, 由于多个进程共享一段内存,因此也需要依靠某种同步机制, 如互斥锁和信号量等(请参考 4...

2018-09-25 19:47:02 2706

原创 Linux 进程间通信(五)IPC的特性

1.标识符和键每个内核中的IPC结构(消息队列、信号量或共享存储段)都用一个非负整数的标识符 (identifier)加以引用。例如,要向一个消息队列发送消息或者从一个消息队列取消息,只需要知道其队列标识符。当一个IPC结构被创建,然后又被删除时,与这种结构相关的标识符连续加1,直至达到一个整型数的最大正值,然后又回转到0。标识符是IPC对象的内部名。为使多个合作进程能够在同一...

2018-09-24 20:47:47 2560

原创 Linux 进程间通信(四)信号量

1 信号量概述信号量和其他IPC不同,并没有在进程之间传送数据,信号量用于多进程在存取共享资源时的同步控制就像交通路口的红路灯一样,当信号量大于0,表示绿灯允许通过,当信号量等于0,表示红灯,必须停下来等待绿灯才能通过。进程间的互斥关系与同步关系存在的根源在于临界资源。临界资源是在同一个时刻只允许有限个(通常只有一个) 进程可以访问(读) 或修改(写)的资源, 通常包括硬件资源(处...

2018-09-24 20:27:52 2977

原创 UNIX高级编程:第14章 高级IO

请移步到:http://note.youdao.com/noteshare?id=d654b94cb2f69813324821b779a79338&sub=42F0C7DC55444E6D8680570BFB0B15CF14.2 非阻塞I/O系统调用分成两类: “低速”系统调用和其他。低速系统调用可能会使进程永远阻塞包括:如果某些文件类型(如读管道、终端设备和网络设...

2018-09-24 14:40:01 227

原创 程序员的技术成长三阶段模型

技术成长三阶段模型为了更好地选择技术方向,我们先来介绍一个模型,我给它取了个名字叫“技术成长三阶段模型”,参照下图1-1所示。图1-1 技术成长三阶段模型我们在一个专业领域内的成长,基本上都会经历三个阶段:初级阶段:专项能力的提升 中级阶段:技能体系的构建 高级阶段:融合创新1.初级阶段:专项能力的提升专项能力提升阶段是初级阶段,针对某项具体任务你必须先具备某些基础能...

2018-09-24 14:37:17 756

原创 Linux的内存I/O映射

内存的I/O映射是将文件某区域的内容映射到进程的虚拟空间的技术通过对文件的内存IO映射,可使用用户对文件的操作转换为对内存的操作,这样不仅使用方便而且提高了存储速度。1.定义存储空间void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);...

2018-09-24 14:28:40 649

原创 Linux记录锁(文件锁)

记录锁(record locking)的功能是:当第一个进程正在读或修改文件的某个部分时,使用记录锁可以阻止其他进程修改同一文件区。“记录”这个词是一种误用,因为UNIX系统内核根本没有使用文件记录这种概念。一个更适合的术语可能是字节范围锁 (byte-range locking),因为它锁定的只是文件中的一个区域(也可能是整个文件)。struct flock { ...

2018-09-24 09:37:04 2248

原创 Linux的五个I/O模型

前面的 fcntl()函数解决了文件的共享问题, 接下来该处理 I/O 复用的情况了。总的来说, I/O 处理的模型有 5 种。 1.阻塞 I/O 模型:在这种模型下, 若所调用的 I/O 函数没有完成相关的功能, 则会使进程挂起, 直到相关数据到达才会返回。 如常见对管道设备、 终端设备和网络设备进行读写时经常会出现这种情况。2.非阻塞 I/O 模型: 在这种模型下, ...

2018-09-23 20:29:18 4709 1

原创 GCC——函数的局部变量的bug

之前写一个代码,出现莫名奇妙的问题,找了半天,结果发现时GCC的BUG问题:在一个程序中,a函数和b函数中定义了相同变量c,a函数给变量赋值了,b函数没赋值结果:在b函数中调用c,其实是调用了a函数的变量c当发现这个问题时,我也感觉莫名其妙,我猜想时编译器的问题,主要是在变量存储方面以下是代码:#include <stdio.h>#include...

2018-09-19 22:21:56 378

原创 UNIX高级编程:第13章 守护进程

请移步到这:http://note.youdao.com/noteshare?id=71c3766867abb8bfbc459c415da88cfb&sub=03BC97B943C94432A6A769D31766E1C313.2 守护进程的特征 注意,大多数守护进程都以超级用户(root)特权运行。所有的守护进程都没有控制终端,其终端名设置为问号。内核守护进程以无控制...

2018-09-18 10:46:55 162

原创 UNIX高级编程:第12章 线程控制

请移步到这里:http://note.youdao.com/noteshare?id=797569d9f0daf39b84a5eed3f5649622&sub=05396B98DAF44650ACC76BE7F90549F0 1 线程取消线程可以通过调用pthread_cancel函数来请求取消同一进程中的其他线程。从编程的角度来讲, 不建议使用这个接口。 笔者对该接口...

2018-09-17 19:03:22 330

原创 Linux线程和fork

 参考这个博客就可以了:https://www.cnblogs.com/liyuan989/p/4279210.htmlint pthread_atfork(void (*prepare)(void), void (*parent)(void),void (*child)(void));  //线程创建进程    用pthread_atfork函数最多可以安装3个帮助清理锁的函...

2018-09-17 18:53:44 847

原创 Linux线程中的信号

相比于进程中的信号处理,在线程中更加复杂,线程中的信号处理有如下特点:每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的。这意味着单个线程可以阻止某个信号,但是当某个线程修改了一个信号的处理行为,那么所有线程都会共享这个改变。 进程中的信号是递送到单个线程的。如果一个信号和硬件故障相关,那么该信号一般会被发送到引起该事件的线程中去,而其他的信号会被发送到任意的线程中。1.屏...

2018-09-16 20:11:26 584

原创 UNIX高级编程:第11章 线程

请移步到这里:http://note.youdao.com/noteshare?id=1181ceb083c1dcf4a22415ad2433a3be&sub=FBAFCED22E034E15BE56133783B03C16 对于线程, Linux提供了gettid系统调用来返回其线程ID, 可惜的是glibc并没有将该系统调用封装起来, 再开放出接口来供程序员使用。 如果...

2018-09-16 14:11:10 266

原创 UNIX高级编程:第10章 信号

请移步到这:http://note.youdao.com/noteshare?id=327e4f59a13d06c3edffdca07fcb4d9a&sub=B74C4FC7187341C5B62B4FE8F4B0B7FF10.2 信号概念    core可以用来GDB调试:当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程...

2018-09-16 14:10:01 261

原创 Linux 同步机制:屏障

屏障(barrier)是用户协调多个线程并行工作的同步机制。屏障允许每个线程等待,直到所有的合作线程都到达某一点,然后从该点继续执行。它们允许任意数量的线程等待,直到所有的线程完成处理工作, 而线程不需要退出。所有线程达到屏障后可以接着工作。作用:使用于大量的运算,而个线程间没有干扰 用一些需要等待所有线程完成后,所有线程才能继续进行的应用可以使用pthreadbarrier...

2018-09-16 13:24:26 371

原创 Linux 同步机制:自旋锁

自旋锁(SpinLock):锁的目的是为了保护共享资源,实现线程同步。自旋锁区别于其他锁的地方在于若某线程在未获得锁时将不断的询问(判断)自旋锁保持者是否释放了锁(获取锁操作将自旋在那里,不断地申请获取,直到自旋锁保持者释放了锁),因此比较适用于保持锁时间比较短的情况(CPU一直在空转)。需要注意的是:一个锁只能有一个保持着。 互斥锁(Mutex): 某线程A获得互斥锁,可以访问共享资源,而当...

2018-09-16 10:49:39 337

原创 Linux 同步机制:条件变量

讲条件变量之前,要先讲互斥量(也称互斥锁)1.互斥锁:我把它比作厕所的门,只能有一个人通过 打开这个门使用CPU(或变量),(当然可以有多个厕所门)就上厕所一样,不可能两个人打开一个门,然后一起蹲同一个坑,当一个人检查到门打开着,就会进去,然后关门,另一个人,想上厕所只能一直等门打开假设下面这样的情景:线程1和线程2要读变量BUF,线程3写BUF,线程3没写BUF之前,...

2018-09-16 09:59:23 2151

原创 Linux的pthread_cleanup_push()和pthread_cleanup_pop()函数

注册线程清理函数void pthread_cleanup_push(void (*routine)(void *),void *arg); 触发清理函数void pthread_cleanup_pop(int execute);   注意:触发函数只是做触发作用,就是提前执行清理函数,而不用等到线程结束后才清理即使没有调用这个触发函数,也会进行清理 显然pt...

2018-09-15 16:43:50 975

原创 线程概述

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程包含以下内容:一个指向当前被执行指令的指令指针; 一个栈; 一个寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值; 一个...

2018-09-15 10:19:24 234

原创 Linux的sigqueue函数

函数sigqueue——发送的信号可以排队int sigqueue(pid_t pid, int sig, const union sigval value);union sigval {int sival_int;void *sival_ptr;};注意:可以阻塞的信号的数量不是无限制的sysconf(_SC_SIGQUEUE_MAX)  //可以得到最大值实...

2018-09-14 19:17:49 1016

原创 linux的sigsetjmp和siglongjmp函数

一般函数的跳转函数:int setjmp(jmp_buf env);    //设置跳转点void longjmp(jmp_buf env, int val);  //起跳专为信号设置的跳转函数:void siglongjmp(sigjmp_buf env, int val);        //起跳int sigsetjmp(sigjmp_buf env, int sa...

2018-09-14 13:42:57 1650

原创 linux的sigaction函数

    这里要说明的是 sigaction()函数中第 2 和第 3 个参数用到的 sigaction 结构, 这是一个看似非常复杂的结构, 希望读者能够慢慢阅读此段内容。首先给出了 sigaction 的定义, 代码如下:struct sigaction{    void (*sa_handler)(int signo);    sigset_t sa_mas...

2018-09-14 10:18:02 838

原创 Linux信号集

信号集的函数:类型:sigset_t 类型/**************************** *功能:把一个信号集的内容清空 *参数:sigset_t *set:是一个信号集,sigset_t的类型一定是可以容纳所有的信号的个数 *返回值:成功返回0,失败返回-1 * ************************/int sigemptyset(sigset_t *...

2018-09-14 09:24:18 250

原创 常见的内存错误及对策

发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到,而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。常见的内存错误,及其对策如下所述。(1)内存分配未成功,却使用了它。编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否为...

2018-09-12 22:11:59 746

原创 UNIX高级编程:第9章 进程关系

请移步到这:http://note.youdao.com/noteshare?id=1c335abb23c9b6b5ba97e26a02ceb711&sub=D91CCCB053284DBFB246E33C5E90EFDD      

2018-09-12 18:53:00 154

原创 UNIX高级编程:第8章 进程控制

请移步到这:http://note.youdao.com/noteshare?id=b048fc4beccc1b6f57d920f888c3554b&sub=F14CEA327AB24015A0506A2F4780FB24 如何查看一个进程现在的状体呢?#ps -auUSER        PID %CPU %MEM    VSZ   RSS TTY      STAT S...

2018-09-12 18:51:56 175

原创 获得进程执行时间

Linux中有很多获得时间信息的方法,但各自有各自的优缺点1.使用time命令# time ./a.out ,,,//这是a.out 执行的内容real    0m0.001suser    0m0.001ssys    0m0.001s优点:可以直接获得进程的各种时间缺点:只能在命令行执行2.使用wait3获得进程的时间相关结构体:struct rusa...

2018-09-12 18:36:10 619

原创 linux文件重命名mv和rename

文件重命名1.把oldname——》newname,且以“newname”为名字的文件不存在方法:用函数:rename(oldname, newname);用命令:mv oldname newname2.把oldname——》newname,且以“newname”为名字的文件存在方法:用函数:rename(oldname, newname);用命令:mv ol...

2018-09-11 19:08:40 4739

原创 文件系统之延迟分配(一)

参考:https://mp.weixin.qq.com/s?__biz=MjM5NjQ4MjYwMQ==&mid=2664612021&idx=1&sn=13929f77df030f970b4c4ccc25a42efd&chksm=bdcefbf38ab972e5314747389a5e51fb8bde6ac5fcb2140ec7334e074519cb2c4d...

2018-09-11 18:44:40 1129

原创 C语言类型转换

1.自动转换 如:1+'2' //字符2转为502.隐式转换 如:int a;char b = a;3.强制转换 如:char a = (int)'2'一:自动转换当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作,转换规则是由低级向高级转换。转换规则如下图所示:二:隐式转换(1)相同数据类型之间的转换1.有符号数据类型————》...

2018-09-10 23:13:25 409

原创 C 库函数vprintf

描述C 库函数 int vprintf(const char *format, va_list arg) 使用参数列表发送格式化输出到标准输出 stdout。其实printf和scanf一系列,有很多函数int printf(const char *format, ...);int fprintf(FILE *stream, const char *format, ...);int...

2018-09-10 19:39:48 1949

原创 fflush(FILE *stream)函数的用法

int fflush(FILE *stream)在大多数文件都是全缓冲的,意思就是当缓冲区满了才会写到磁盘用这个函数可以马上写磁盘注意:在调用下面这些函数后,应该及时使用fflush写磁盘如:int fputc(int c, FILE *stream);int putc(int c, FILE *stream);int putchar(int c);int puts...

2018-09-10 13:34:35 1108

原创 #include 和#include "filename.h"有什么区别?

正确答案:#include < filename.h>,编译器从标准库路径开始搜索filename.h#include "filename.h",编译器从用户的工作路径开始搜索filename.h. 题目解析:使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境变量时设置的),而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未...

2018-09-09 12:55:40 800

原创 strlen和sizeof的区别

  一:当没有指定字符数组的大小时如:char buf [  ] = {"12345\n"};strlen(buf) 等于  6sizeof(buf) 等于  6二:当指定字符数组的大小时如:char buf [BUFSIZE] = {"12345\n"};   //BUFSIZE = 20;strlen(buf) 等于  6sizeof(buf) 等于  20...

2018-09-09 08:30:40 261

转载 Linux下C程序的反汇编

转载:https://blog.csdn.net/u011192270/article/details/50224267Linux下C程序的反汇编前言:本文主要介绍几种反汇编的方法。gccgcc的完整编译过程大致为:预处理->编译->汇编->链接前三个步骤分别对应了-E、-S、-c三个选项。今天我要介绍的第一种方法就是使用-S这个选项。源程序mai...

2018-09-08 15:08:50 716

原创 for(;;)和while(true)的区别

再看JDK源码的时候发现,“死循环”有两种写法:for(;;)和while(true),我就疑问,两者有啥区别,有啥源码中多数是for( ; ; )这种形式的,编译前              编译后     while (1);         mov eax,1                                                test eax,eax ...

2018-09-08 14:52:07 1091

PaddleOCR2.7+Qt5

PaddleOCR2.7+Qt5,字符识别,GPU

2024-05-29

opencv编译需要的.cash包

opencv ffmpeg ippicv wechat_qrcode的依赖包

2023-12-23

光度立体技术字符识别和缺陷检测

在工业领域,表面检测是一个非常广泛的应用领域。在halcon中,使用增强的光度立体视觉方法,三维表面检测被加强。利用阴影可方便快速的检测物体表面的缺口或凹痕。 使用光度立体视觉方法可在复杂图像中轻松找到表面缺陷 。

2022-07-30

QT6源码编译所需要的工具

现在QT在线安装只有QT6.2以上的版本和QT5.15,其他版本就需要自己编译,本文讲解在vs2019环境下编译qt6.1.3源码。

2022-06-18

PCL1.12+VTK9.1+QT6编译部署

PCL1.12+VTK9.1+QT6编译部署

2022-06-10

QT6+CloudCompare显示3D点云

CloudCompare是一个三维点云(网格)编辑和处理软件。最初,它被设计用来对稠密的三维点云进行直接比较。它依赖于一种特定的八叉树结构,在进行点云对比这类任务时具有出色的性能。此外,由于大多数点云都是由地面激光扫描仪采集的,CloudCompare的目的是在一台标准笔记本电脑上处理大规模的点云——通常超过1000万个点云。在2005年后,cloudcompare就实现了点云和三角形网格之间的比较。随后,许多其他点云处理算法(配准、重采样、颜色/法线向量/尺度、统计计算、传感器管理、交互式或自动分割等)以及显示增强工具(自定义颜色渐变、颜色和法向量处理,校准图像处理、OpenGL着色器、插件等)

2022-04-27

Test12_16.zip

Test12_16.zip

2021-12-16

yolotest.zip

车辆检测

2021-10-22

halcon二维码识别.zip

基于dym做一个二维码识别的软件

2021-10-05

libtest.zip

把C++当脚本写,基于QT6,适合做一些比较复杂的脚本

2021-09-14

OCR_Demo3.zip

最近在学习PaddlePaddle开源算法平台,发现PaddlePaddle里面的PaddleOCR可以应用到很多场景,识别率很高,而且兼容很多平台。本文建讲解一下PaddleOCR安装部署和让QT使用PaddleOCR。

2021-09-04

Qt开发MQTT测试源码

Qt开发MQTT,测试源码,QMQTT,外加一个辅助测试软件

2021-06-22

logtest.zip

使用Log4Qt构建自己的日志系统,同时重定向到窗口显示。

2021-05-23

QtPluginDemo.zip

一个大型的软件,架构相当复杂,如果有新的开发工程师进入团队,并参与到软件的功能扩展中,如果没有插件,那整个系统需要应该新功能而重新重新,并且新成员熟悉整个软件系统的成本也非常高

2021-03-21

Qt6SerialPort.zip

在QT6中实现串口模块Qt6SerialPort,文章链接https://blog.csdn.net/qq_40732350/article/details/113634422

2021-02-04

Qt实现二维码的编解码

Qt实现二维码的编解码,能够通过字符串生成二维码,qrcode库和QZXing库,博客地址https://blog.csdn.net/qq_40732350/article/details/109550957

2020-11-07

halcon19可用dll.zip

HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境。它节约了产品成本,缩短了软件开发周期——HALCON灵活的架构便于机器视觉,医学图像和图像分析应用的快速开发。在欧洲以及日本的工业界已经是公认具有最佳效能的Machine Vision软件。

2020-08-03

qthalcon3d.zip

QT+Halcon的资料很少,而3D资料就更少下面是我实现的QT+Halcon3D图像显示 QT+Halcon的资料很少,而3D资料就更少下面是我实现的QT+Halcon3D图像显示

2020-07-04

draw_qwidget.zip

由于项目要涉及芯片检测的功能,需要选择特定区域,所以制作了个区域选择框,在QWidget上绘制区域框,可以放大缩小移动,可以是矩形,也可以是椭圆,注释非常完整。 需要详细介绍的可以参考我的博客https://blog.csdn.net/qq_40732350/article/details/103538593

2019-12-14

Linux基本用到的函数

本书源自日均阅读量近万次火爆的线上同名课程,口碑与影响 力俱佳,旨在打造简单易学且实用性强的轻量级 Linux 入门教程。

2018-09-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除