摘要: 一般项目exe通过调用各种封装的dll来完成工作。视觉项目exe调用采集库dll、检测算法dll就可以了,有一定积累后凝练出框架库dll(日志、队列、线程池等必不可少的部分封装) 它们之间通过“接口函数+数据”来配合。 针对采集dll: IGrabber.h 里放接口函数,如开始采集、停止采集、se 阅读全文
posted @ 2024-07-23 16:07 夕西行 阅读(1) 评论(0) 推荐(0) 编辑
摘要: C++的可变参数模板不在本文讨论范围,只用了C的可变参数 ... 做了如下约定: 第一个函参是参数个数 所有可变参数都是size_t类型 #include<stdarg.h> //for va_start等 #include<vector> void add(size_t count,...) // 阅读全文
posted @ 2024-07-23 12:34 夕西行 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 使用面积来判定region是否为空。不要用cout_obj,为空也是1。 #include<HalconCpp.h> using namespace HalconCpp; int main() { HObject img,region; HTuple area; GenImageConst(&img 阅读全文
posted @ 2024-07-21 16:35 夕西行 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 线程传参,值传递和单独的&传递,线程都会保留一份副本,不会对函数外的值造成影响。外边的值释放了,也不影响线程函数里的值。有种普通函数值传递的感觉,里外互不相干。 指针传递,& + std::ref 组合,才是传真身,不会有副本。等效普通函数的指针传递和引用传递了。此时需要注意生命周期内的内存值的改变 阅读全文
posted @ 2024-07-20 16:42 夕西行 阅读(1) 评论(0) 推荐(0) 编辑
摘要: join的目的是线程如何结束(子线程结束,主线程再结束),如果在join之前发生了异常,函数将终止,join不会被调用。为了避免这种情况发生,建议写在析构函数中。 阅读全文
posted @ 2024-07-20 15:47 夕西行 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 容易理解的,简单一点的线程池系列博客 C++多线程编程(九)——总结篇 - 掘金 (juejin.cn) 以下内容是不容易理解的,使用了很多c++11新特性的线程池 1、避免频繁创建、销毁线程,实现复用。思路如下: 2、线程函数多种多样,如何封装成统一的函数类型 void( ) 第一次封装我们使用b 阅读全文
posted @ 2024-07-19 21:05 夕西行 阅读(2) 评论(0) 推荐(0) 编辑
摘要: CPU 的运行原理 控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后 CPU 将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,会将数据地址也送到地址总线,然后 CPU 把数据读到 CPU 的内部存储单元(就是内部寄 阅读全文
posted @ 2024-07-14 21:16 夕西行 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 阈值分割,得到二值图,高于阈值的为255 __m256i 阈值= _mm256_set1_epi8(阈值); __m256i 图像1= _mm256_subs_epu8(原图像, 阈值); //低于阈值的都为0 __m256i 二值图 = _mm256_cmpeq_epi8(图像1, _mm256_ 阅读全文
posted @ 2024-07-05 17:43 夕西行 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 在学习swap函数时,若想改变实参,可以将函参设置为指针类型。 那么函参中的双重指针,也是这种含义。想改变实参(指针类型)的指向或值时,可以用双重指针。 void change(char* p) { p = "bbb"; } int main() { char *v = "aaa"; change( 阅读全文
posted @ 2024-07-05 11:15 夕西行 阅读(2) 评论(0) 推荐(0) 编辑
摘要: LwRB (lightweight ring buffer) 是一个轻量级的环形缓冲区,功能强大、高效。 仓库地址 GitHub - MaJerle/lwrb: Lightweight generic ring buffer manager library 文档地址 LwRB latest-deve 阅读全文
posted @ 2024-07-03 11:22 夕西行 阅读(18) 评论(0) 推荐(0) 编辑