![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 68
C C++ programming posts
高精度计算机视觉
人工智能与视像技术,对技术有点执着
展开
-
AI部署开发指南:用vs2019编译OnnxRuntime-v1.16.2
要详细了解一个系统的部署,对其源码进行调试可能是最好的办法。Pytorch的部署几经改版,最大的特点依然是不稳定,或者使用libtorch这种稳定但优化力度不够的部署方案。而稳定且通用的方案,目前仍然是export to onnx的办法居多。onnxruntime在c++部署方面目前用得比较多,所以这里我们以微软最典型的onnxruntime部署为例,对其源码进行编译。编译后,就可以直接使用vs2019来进行源码级调试抓BUG了。原创 2024-01-24 11:44:15 · 1565 阅读 · 0 评论 -
AI分割一切模型SAM(Segment Anything Model)的C++部署
2023年最火爆的分割模型莫过于SAM,截止今天2024年1月19日,github上的star已经达到了41.7k的惊人数量。项目中有一个export_pre_model.py文件,我略改了一下,因为我没有用hq-sam,直接用的segment-anything,改后内容如下,安装完毕后,用vscode直接打开segment-anything文件夹,选择要测试运行的amg.py文件,然后cmake生成项目,就可以把项目跑起来了,最后的视频效果如下所示。去下载windows上的动态库,我这里的本机地址是,原创 2024-01-22 11:14:38 · 1916 阅读 · 0 评论 -
Qt5.15.2 Camera的怪问题Ghost Win10中QImage::fromData不能得到有效图片
GhostWin10的系统中,img = QImage::fromData(frame.bits(), nbytes);返回的一直是invalid,无法获取正常的图像原创 2023-02-25 14:37:07 · 858 阅读 · 0 评论 -
Qt开发高级进阶:如何在显示时适合视窗宽度和高度(fitWidth+fitHeight)
因为scale是累积相乘。所以正确的做法是,前一次的视图比例乘1/rx后,相当于该维度上scale会被置为1.0,然后,再乘以我们想要的rw(适合宽度)的视图比,就能使图片正好适合视察宽度了。注意这里是指调整图片的显示大小,例如一张800x600的图片,图片大小是不变的,只是显示成任意大小,Qt提供了一个函数scale,同时,配套使用的是transform,算法的基本原理是这样的,这里,scale中的两人个参数表示x,y轴的显示比例,transform中的m11,m22则分别对应这两个比例。......原创 2022-07-26 09:42:00 · 1144 阅读 · 0 评论 -
VisualStudio2019无法正常使用printf或std::cout(卡死)的解决办法
相信很多人碰到过这个问题,就是在使用vs2019时,即使是一个非常简单的程序,如,在 Debug模式(调试状态)下,也会出现程序卡死在printf的情况。针对这种情况,网上有很多说法,例如,visual c++ - Printf is not printing anything to output? C++ SDL - Stack Overflowhttps://stackoverflow.com/questions/11068565/printf-is-not-printing-anything-t.原创 2022-06-20 11:15:37 · 5164 阅读 · 0 评论 -
CloudCompare源码分析_八叉树(Octree)算法基础CC中的八叉树结构
CC的octree算法主要体现在DgmOctree.h和DgmOctree.cpp中,他采用了一种分级的结构,最大支持21级,如下,然后,会事先计算得到一个分级表,CC这么做的原因是,把事先能计算好的数据先存储起来,用空间换时间的办法,来加速运算速度。所以这个value实际相当于这样一个表,(2) PRE_COMPUTED_POS_CODES这里,MAX_OCTREE_LENGTH == (1.........原创 2022-06-18 16:54:23 · 1773 阅读 · 0 评论 -
CloudCompare源码分析_显示渲染的程序架构
这一讲介绍一下CloudCompare的大致绘制流程或者说绘图框架的结构。根据前面一篇对CloudCompare读取PLY文件的介绍 ,很容易找出当cloudcompare读取到mesh文件(newGroup)后,会把这个文件通过addDB加载到根对象下面,这个根对象,就是ccDBRoot,其内部定义了一个ccHObject的指针,m_treeRoot,最终用来容纳子对像当然,这些都不是重点。重点是:CloudCompare是如何完成3D渲染的,相关的OpenGL函数,或者是Qt的Open原创 2022-06-17 21:27:26 · 2352 阅读 · 3 评论 -
Qt开发高级进阶: WebCamera(UVC)摄像头使用QAbstractVideoSurface捕获视频帧到QImage
通常,如果你只是想打开UVC(web camera)并显示数据的话,那最简单的方式就是使用类似下面的代码,如果使用QGraphicsView和QGraphicsScene的方式,则通常用QGraphicsVideoItem会更合适,和前面的代码类似,以上的问题是,如果我们 需要把每一帧数据收集起来,例如压缩成mp4,或者通过网络发送出去,或者需要对他进行视觉图形处理(这在机器视觉中是必须的),那就必须想办法把每一帧图像转变成QImage才行。这里我就不讲理论了,我把这个写成了一个简单易用的头文件原创 2022-06-15 17:05:34 · 2626 阅读 · 0 评论 -
CloudCompare源码分析:读取ply文件
写这些博客的原因,是因为打算好好研究一下点云的各种库的源码,其中比较知名的是PCL(point cloud library)和CC(CloudCompare)。读源码的时候也没有什么头绪,所以看到哪里就写到哪里,算是随兴之作吧!回想起当年学网络编程,也是先一头扎进去,总结一番再说。至于总结得比较到位的结论,往往要等到对框架有一个大体的了解熟悉之后才行。从哪里开始呢?这里从最基本最简单的PLY文件读取开始吧。PLY是Polygon的意思,是以多边形的方式保存了空间点位信息。Mesh的格式非常多,如果想了解的话原创 2022-06-11 18:50:12 · 3879 阅读 · 2 评论 -
Qt5.9.5+Jetson Nano开发:unknown module(s) in qt designer
新入手Jetson nano,自带的Qt5.9.5,拿到手的时候没办法编译QT程序,报错:Project ERROR: Unknown module(s) in QT: designer原创 2022-06-09 13:25:31 · 977 阅读 · 0 评论 -
VS2019: LNK2019 无法解析的外部符号 __imp__invalid_parameter
VS2019开发一个项目,报错:如下,error LNK2001: unresolved external symbol __imp___CrtDbgReport error LNK2001: unresolved external symbol __imp___invalid_parametererror LNK2001: unresolved external symbol __imp___CrtDbgReportW error LNK2001: unresolved external symbol _原创 2022-06-07 23:45:06 · 3309 阅读 · 0 评论 -
Qt开发高级进阶:VS2019双击编辑UI时闪退:无法打开文件
当试图通过双击Qt widget的UI对其进行编辑时,Qt Creator会打开,但随后会迅速关闭,然后报错:无法打开文件原创 2022-06-06 15:08:38 · 1558 阅读 · 3 评论 -
Qt开发高级进阶: 用lambda表达式写一个跨平台的屏幕取色器
用Qt lambda表达式写的一个跨平台的屏幕取色器原创 2022-06-02 15:26:20 · 277 阅读 · 0 评论 -
CMake学习进阶:find_library链接到debug和release
find_library官方的解释在这里,find_library — CMake 3.23.2 Documentationhttps://cmake.org/cmake/help/latest/command/find_library.html因为文章比较长,就不摘录了。开始我以为是找库文件的路径的,当然这么理解似乎也没错,于是我自己编译了一个库nng,测试了一下,find_library(NNG_LIBRARY debug nngd optimized nng HINTS ${NNG_LI原创 2022-05-30 18:16:12 · 1081 阅读 · 0 评论 -
Qt开发高级进阶:如何拷贝生成后的文件到特定文件夹
Qt编译成功后,当很多项目联合调试的时候,经常要拷贝文件。先给出参考地址:qt - QMake - how to copy a file to the output - Stack Overflowhttps://stackoverflow.com/questions/3984104/qmake-how-to-copy-a-file-to-the-output其中有一个提到拷贝函数,defineTest(copyToDestDir)Copying files with qmake | Dec原创 2022-05-30 16:41:28 · 1855 阅读 · 0 评论 -
使用protobuf_example_addressbook.proto项目时的问题:PROTOBUF_USE_DLLS
有一段时间没有用到protobuf了,长时间不用,都忘光了;所以重新弄一下addressbook.proto。没想碰到一个老问题,所以特别备注一下。cd D:\vsNCNN\protobuf391_exampleprotoc -I=. --cpp_out=. addressbook.protocd D:\vsNCNN\protobuf391_example\google\protobufprotoc -I=. --cpp_out=. timestamp.proto然后新建...原创 2022-05-22 12:57:39 · 606 阅读 · 0 评论 -
Qt开发高级进阶:C++中使用dynamic_cast实现父类与子类之间进行安全的类型转换
通常,在C++中需要用到各种类型转换,典型的如const_cast, dynamic_cast, reinterpret_cast, static_cast。这时讲两种实现办法: dynamic_cast和直接计算的办法(1) dynamic_cast最常用的,dynamic_cast: 动态类型转换,可以在父类与子类之间进行安全的类型转换,运行时类型检查,并且可以知道自己子类的类型。缺点是耗时稍微有点长。reinterpret_cast: 强制类型转换,可以在不同类型之间进行强制转换,很难保原创 2022-05-13 11:51:52 · 2091 阅读 · 0 评论 -
Qt-creator warning: Missing Qt Debug Information
初使用qt-creator的时候,弹出这么一个东西,Missing Qt Debug InformationThe installed Qt 5.15.0 MSVC2019 64bit is missing debug information files.Locals and Expression might not be able to display all Qt types in a human readable format.Please Install the "Qt debug i原创 2022-04-04 18:46:19 · 3869 阅读 · 2 评论 -
Tesseract-OCR在Ubuntu20.04平台上使用
安装Tesseract-OCR在ubuntu20.04上,我们按官方的最简单方式安装,sudo apt install tesseract-ocr如果你需要做开发,或是自己训练模型,那就要安装开发者工具,sudo apt install libtesseract-dev 安装完了检查一下,发现版本是4.1.1tesseract -vtesseract 4.1.1 leptonica-1.79.0 libgif 5.1.4 : libjpeg 8d (libjpeg-原创 2022-03-20 16:54:38 · 3847 阅读 · 0 评论 -
一个完整的CMake+OpenMPI编译链接hello-world过程
前面写了一个关于《一个完整的cmake+clang+llvm编译链接hello-world过程》,感觉写这个的时候有点多余,因为大多数都是依葫葫芦画瓢,不过刚刚碰到一些MPI的问题,在网上找了一圈,发现太多关于MPI的误人子弟的贴子(我想主要原因可能是因为这些帖子太老了,不适用,软件都已经更新了好几代了),所以在这里写个简单的hello-world澄清一下。比如MPI入门级的大量的报错,Li...原创 2019-01-30 15:07:33 · 5022 阅读 · 0 评论 -
一个完整的cmake+clang+llvm编译链接hello-world过程
相信目前使用clang+llvm大有人在,我的系统ubuntu18.04前段时间刚安装了不少软件,习惯性的也会装上gcc/g++和clang/clang++,关于如何在两个编译器之间切换这里不再赘述,可能参考下面的链接:Switching between GCC and Clang/LLVM using CMake写这个贴子是因为clang/clang++在网上大都没有一个完整的例子,大部分讲...原创 2019-01-28 18:38:56 · 24695 阅读 · 0 评论 -
Qt Creator 的下载与安装
QT一直用的不多,所以记录一下。另外有个地址有下载集成安装包的,Download Package- Qt OverviewDownload / Qt6 / Qt5 / Qt4 / C/C++ / GUI / Graphical User Interface / Official Installer / Offline Installerhttp://dts.digitser.cn/en-US/download/qt/index.htmlQt Creator 的下载与安装一、Qt和Qt..转载 2022-02-13 12:46:05 · 8312 阅读 · 0 评论 -
gcc 和 g++
用gcc 编译链接cpp源码先给出源码及编译链接结果:me.h:extern "C" void CppPrintf(void);me.cpp:#include #include "me.h"using namespace std;void CppPrintf(void){ cout << "Hello\n";}test.cpp:#i...原创 2019-01-26 17:19:13 · 526 阅读 · 0 评论 -
C++未经处理的异常...stackoverflow(参数: 0x0000000000000001...)-- 分配大内存
今天碰到一个问题c++编译时一切正常,运行时出错0x00007FF6925BE108 处有未经处理的异常(在 AutoProject.exe 中): 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x000000E3CE403000)。Unhandled exception at 。。。。。 : Stack overflow (...原创 2019-07-04 11:41:38 · 13092 阅读 · 1 评论 -
C++的问题:变量“xxx”不是类型名
碰到过很多类似的情况,看到网上不少人有相似的疑问,就解释一下吧:如果使用方法都正确的话,最好把类型变量“xxx”改一下,比如你原来名称是“XClass",那么改成"YClass"基本就没有问题了,这个错误的根源,还在于XClass被认为是变量,也就是系统或者你在某个地方定义了这个成为变量,而当程序在这个报错的地方需要一个类型的时候,编辑器或编译器首先找到的是有相同名字的变量,从而导致无法正确地...原创 2019-12-23 13:36:15 · 24409 阅读 · 6 评论 -
C++: 利用std:remove删除文件中的内容
一般,如果发现要打开的文件中有内容,要删除的话,可以直接删除该文件,然后再创建一个。不过也可以这样#include <iostream>#include <fstream>using namespace std;int main(){ string str = "temp.txt"; ofstream ofs(str.c_str());...原创 2018-09-12 09:11:32 · 13196 阅读 · 5 评论 -
VS2019 EXE程序如何链接(使用)静态库中的资源(控件)
一般情况下,我们用DLL动态库中的资源会比较方便,但是,假如我们需要在静态库中链接资源那该怎么办?假设你的Solution下有两个项目,一个静态库MyStatic1,一个执行文件MyEXE,该执行文件依赖静态库,而静态库中MyStatic1中有对话框之类的控件。一般情况下,静态库中的控件是不会响应程序的。VS不会主动链接静态库中的任何资源。这时,你需要在你的 EXE项目-->属性--链接器--输入--附加依赖项,添加下面这一行:$(SolutionDir)mystatic1\x64\de.原创 2021-08-02 23:42:41 · 1051 阅读 · 0 评论 -
C++ 中多维数组之间的快速转换(以1维2维数组的相互转换为例说明)
在图像处理中,大规格的数组之间的转换是家常便饭。c++中多维数组在本质上就是一个地址问题,普通情况下,可以通过类似如下方法进行暴力转换int arr[50];int main(){ unsigned i, j; for (i = 0; i < 50; i++) { arr[i] = 2 * i; } int bruteArray[7][7]; for (i =...原创 2019-06-27 14:34:23 · 6987 阅读 · 0 评论 -
UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, FLOAT, DOUBLE
UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64固定长度的整型,包括有符号整型或无符号整型。整型范围¶Int8 - [-128 : 127] Int16 - [-32768 : 32767] Int32 - [-2147483648 : 2147483647] Int64 - [-922337203685477580...原创 2019-12-25 13:40:43 · 35745 阅读 · 0 评论 -
c++ 如何给数组批量赋值--利用结构定义数组以提高程序的可读性
编程久了,时不时总会碰到些不断重复的的小问题,比如:int ar[3] = {1,2,3};int br[3] = {10,11,12};如何使完成赋值操作:br=armemcpy是一个办法,但程序可读性不强。更不可忍受的是下面这样的代码(想像一下一个工程中往往要用多少数组吧):for(int i=0; i<3; i++){ ar[i] = br[i];...原创 2019-12-31 10:12:05 · 6580 阅读 · 0 评论 -
C++中数字格式化成字符串输出时,如果字符串长度是变量怎么办?
通常情况下,使用int seq=1234567890;printf("%012d", seq);会输出一个以0开头的12位长的字符串:001234567890。但是,如果这个12的长度不确定,由一个变量控制, 有时是13,有时是16怎么办呢?我的情况就比较典型,有上万张图片,要重命名其中的一部分。我的解决办法是char format[20];char format[20...原创 2019-08-25 17:29:46 · 1212 阅读 · 0 评论 -
Protobuf,gmock,gtest在windows10上的编译与安装
首先要说的是,这种编译与安装不是必须的,用户可以自己下载protoc的二进制文件直接使用。因为开发和调试的原因,我经常反复需要编译不同版本的protobuf,例如NCNN用的protobuf3.4.0。因为重复的过程中自己也没有详细记录过,所以这里记录一下备忘。(I)第一步,下载gmock。https://codeload.github.com/google/googletest/tar.gz/refs/tags/release-1.11.0https://codeload.github.com/g原创 2022-01-11 14:44:28 · 1365 阅读 · 0 评论 -
libusb源码学习:几个函数加载的宏(windows)
首先,我们复习一下C语言中的函数指针://C语言中的函数指针#include <iostream>// 下面typeFunc就一个函数指针,指向的函数类型 f 为// void f(void)typedef void (*typeFunc)(void);void realFunc(void) { std::cout << "test" <<...原创 2020-01-13 14:01:08 · 452 阅读 · 0 评论 -
libusb源码学习:list_entry
USB开发涉及到libusb,看了下源码,现在已经到了1.0.23版;全部用的C,编译器和平台的普适性相对比较强;其中的list_head作为关键链表,也是各个链接结构的成员(member)变量。而利用这个成员变量完成各个结构链接,涉及到几个很有意思的宏,其中包括list_entry,list_for_each_entry,这种用法和我们最普通的用法有点区别:在C ++中,通常我用标准std:...原创 2020-01-13 10:47:11 · 867 阅读 · 0 评论 -
c++ windows 之下 CreateThread vs CreateProcess
微软的解释,作个地址备注:https://docs.microsoft.com/en-us/windows/win32/procthread/processes-and-threadsProcesses and Threads05/31/2018An application consists of one or more processes. Aprocess, in the si...转载 2020-01-04 10:24:13 · 606 阅读 · 0 评论 -
Libuv 1.34.2 源码详解 ---- 以uvCat为例讲解
这些天病毒肆虐,心里很难过。一直对libuv高并发处理的能力好奇,只好呆家里看了一下libuv的源码。libuva其实代码量很小,很精悍。但理解起来并不容易。网络上有不少解析的文章,不过大多见树叶而不见森林,我前几天刚在网上找资料时,看了一天都还没摸着头脑。我想对于很多刚开始学习libuv的朋友,可能不少和我类似,最重要的应该是知道谁,起的作用是什么?整个框架大概是什么样子的?这样,当碰到具体...原创 2020-01-30 14:35:56 · 1031 阅读 · 0 评论