自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 C#多线程和异步(三)——一些异步编程模式

现在我们完全可以使用更优秀的其他异步编程模式去替代它。BeginInvoke :执行BeginInvoke方法时,会线程池中获取一个独立线程来执行引用方法,并立即返回一个实现IAsyncResult接口的对象的(该对象包含了线程池中线程运行异步方法的状态),调用线程不阻塞,而引用方法在线程池的线程中并行执行。回调(callback):原始线程一直执行,无需等待或检查发起的线程是否完成,在发起的线程中的引用方法完成之后,发起线程会调用回调方法,由回调方法在调用EndInvoke之前处理异步方法的结果。

2023-04-18 19:16:55 449

原创 C#多线程和异步(二)——Task和async/await详解

通过上边的介绍,我们知道async/await是基于Task的,而Task是对ThreadPool的封装改进,主要是为了更有效的控制线程池中的线程(ThreadPool中的线程,我们很难通过代码控制其执行顺序,任务延续和取消等等);当线程池中所有的线程都在忙碌时,又有新任务要处理时,线程池才会新建一个线程来处理该任务,如果线程数量达到设置的最大值,任务会排队,等待其他任务释放线程后再执行。②如果我们想让所有的线程执行完毕(或者任一线程执行完毕)时,立即解除阻塞,使用Join方法不容易实现。

2023-04-18 19:12:43 3346

原创 C#多线程和异步(一)——基本概念和使用方法

一个正在运行的应用程序在操作系统中被视为一个进程,包含着一个运行程序所需要的资源,进程可以包括一个或多个线程。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的。出现该错误的原因是:myTxtBox是由主线程创建的,thread1线程是另外一个线程,在.NET上执行的是托管代码, C#强制要求这些代码必须是线程安全的,即不允许跨线程访问Windows窗体的控件。

2023-04-18 19:00:39 559

原创 虚拟串口工具VSPD的使用

上位机调试串口时,有时是没有硬件设备的,只能虚拟串口,这里简单的讲讲VSPD的使用VSPD是Virtual Serial Port Driver的简写,由著名的软件公司Eltima制作。下载地址:https://www.cr173.com/soft/21406.html。添加完成后,打开2个串口助手,一个打开COM1,一个打开COM2。下载后安装运行,首先添加端口映射,让COM1和COM2形成回环。下载VSPD,这里有个链接,大家也可以自行搜索下载。2个串口助手可以互相通讯了。

2023-01-05 14:22:07 4020

原创 Windows查看端口占用

通过命令杀掉进程,或者是直接根据进程的名称杀掉所有的进程,,在命令框中输入如下命令taskkill /f /t /im “进程id或者进程名称”进入windows命令窗口之后,输入命令,输入netstat -ano然后回车,就可以看到系统当前所有的端口使用情况。查看到对应的进程id之后,就可以通过id查找对应的进程名称,使用命令tasklist |findstr “进程id号”杀掉对应的进程id或者是进程名称之后,然后再通过查找命令,查找对应的端口,现在就可以看到这个端口没有被其他应用所占用。

2023-01-05 14:15:47 557

原创 QT从入门到入土之常用控件(五)——按钮长按事件分析

**引言**最近在做qt项目,需要对button按钮添加一个长按事件(比如点击按钮,开始运动。松开按钮,运动停止)。查了些许资料,(差点误把QPushButton的press信号和长按事件混淆)在此记录一下经验。setAutoRepeat以前一直以为QPushButton不支持长按,才发现还有这个功能。用起来很简单: QPushButton *pBtnSub = new QPushButton(this); pBtnSub->setAutoRepeat(true); //启用长按

2022-07-19 15:04:11 1478

原创 c# Invoke 与BeginInvoke 的用法(通俗易懂,最全)

*c# Invoke 与BeginInvoke 的用法大全

2022-07-19 14:58:04 2734

原创 C# 多线程Invoke,begininvoke的用法详解

一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解。首先说下,invoke和begininvoke的使用有两种情况:control中的invoke、begininvoke。delegrate中的invoke、begininvoke。这两种情况是不同的,我们这里要讲的是第1种。下面我们在来说下.NET中对invoke和begininvoke的官方定义。control.invoke(参数delegate)方法:在拥有此控件的基础窗口句柄的线

2022-07-08 15:38:37 1625 2

原创 VS解决方案、命名空间和项目的关系

解决方案,命名空间和项目的关系

2022-06-09 11:35:50 3607

原创 QT从入门到入土(九)——TCP/IP网络通信(以及文件传输)

**引言**TCP/IP通信(即SOCKET通信)是通过网线将服务器Server端和客户机Client端进行连接,在遵循ISO/OSI模型的四层层级构架的基础上通过TCP/IP协议建立的通讯。控制器可以设置为服务器端或客户端。关于TCP/IP协议可详看:TCP/IP协议详解 - 知乎 (zhihu.com)总的来说,TCP/IP通讯有两个部分:客户端和服务器QTcpServer(监听套接字)和QTcpSocket(通讯套接字)监听套接字,顾名思义,监听关于各种通讯的状态,一旦进行通讯,监听套

2022-01-15 17:45:00 1449

原创 QT从入门到入土(八)——项目打包和发布

**引言**新手上路可谓是困难重重,你永远不知道下一个困难会在什么时候出现,在完成了运动控制卡封装发布过程中可谓是举步维艰。因此记录一下qt5+vs2019的打包发布方法。打包整体思路:将编译后的exe可执行文件及其各种依赖dll、lib、图标、配置文件等先打包放到一个目录中对其进行打包发布(两种方式):利用VS的插件Microsoft Visual Studio Installer Projects安装程序打包插件进行打包利用Enigma Virtual Box(单文件封装工具) 进行打包

2022-01-15 17:30:00 410

原创 QT从入门到入土(七)——鼠标事件

引言个人认为,事件机制是Qt最难以理解且最为精妙的一部分。事件主要分为两种:在与用户交互时发生。比如按下鼠标(mousePressEvent),敲击键盘(keyPressEvent)等。系统自动发生,比如计时器事件(timerEvent)等。在发生事件时(比如说上面说的按下鼠标),就会产生一个QEvent对象(这里是QMouseEvent,为QEvent的子类),这个QEvent对象会传给当前组件的event函数。如果当前组件没有安装事件过滤器(这个后面会提到),则会被event函数发放到相应的

2022-01-15 17:00:00 2056

原创 QT从入门到入土(六)——定时器

Qt中有两种方法来使用定时器,一种是定时器事件,另一种是使用信号和槽。常使用信号和槽(代码看起来比较整洁)但是当使用多个定时器的时候最好用定时器事件来处理。**定时器方式一:定时器事件**需要: #include 方式:利用对void timerEvent(QTimerEvent* e)事件的重写。启动定时器 int QObject::startTimer ( int interval ) ;开启一个定时器,返回值为int类型。他的参数interval是毫秒级别。当开启成功后会返回这个定时

2022-01-15 16:00:00 559

原创 QT从入门到入土(五(2))——多线程(QtConcurrent::run())和线程池

**引言**在前面对Qt多线程(QThread)做了详细的分析:QT从入门到入土(五(1))——多线程(QThread) - 唯有自己强大 - 博客园 (cnblogs.com)但是最近在做项目时候,要将一个函数单独运行在另一个线程中,并且这个函数是私有函数,用到的数据也是私有数据,不能通过其他类访问,这样怎么办?如何在Qt中的当前类创建线程?**一, 最简单的多线程QtConcurrent::run()**其函数原型如下:QFuture<T> QtConcurrent::ru

2022-01-15 15:00:00 968

原创 QT从入门到入土(五(1))——多线程(QThread)

引言前面几篇已经对C++的线程做了简单的总结,浅谈C++11中的多线程(三) - 唯有自己强大 - 博客园 (cnblogs.com)。本篇着重于Qt多线程的总结与实现。跟C++11中很像的是,Qt中使用QThread来管理线程,一个QThread对象管理一个线程,在使用上有很多跟C++11中相似的地方,但更多的是Qt中独有的内容。另外,QThread对象也有消息循环exec()函数,即每个线程都有一个消息循环,用来处理自己这个线程的事件。一,知识回顾首先先来回顾一下一些知识点:1,为什么需要多线

2022-01-15 14:30:00 989

原创 QT从入门到入土(四)——文件的读写操作

引言文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处理而开发的,所以文件读写是应用程序开发的一个基本功能。Qt 提供了两种读写纯文本文件的基本方法:用 QFile 类的 IODevice 读写功能直接进行读写利用 QFile 和 QTextStream 结合起来,用流(Stream)的方法进行文件读写。一、文件读操作(1)使用QFile类Qt封装了QFile类,方便我们对文件进行操作,可以按照如下的步骤进行:使用QFile加载文件对象打开文件 file.op

2022-01-15 13:45:00 4998

原创 QT从入门到入土之常用控件(一)——菜单栏和对话框

引言QMainWindow 是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。(本篇主要介绍菜单栏和工具栏)**一,菜单栏**一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。创建菜单栏。QMenuBar* menuBar = new QMenuBar(t

2022-01-15 10:38:58 967

原创 QT从入门到入土(三)——信号和槽机制

摘要信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号 (signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣, 它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函 数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接 的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个 操作就会被自动触发。(这里提一句,Qt 的信号槽使用了

2022-01-15 09:15:05 235

原创 QT从入门到入土(二)——对象模型(对象树)和窗口坐标体系

摘要我们使用的标准 C++,其设计的对象模型虽然已经提供了非常高效的 RTTI 支持,但是在某些方面还是不够灵活。比如在 GUI 编程方面,既需要高效的运行效率也需要强大的灵活性,诸如删除某窗口时可不想把子窗口用代码一个个去析构。Qt 将这两者的优点完美的结合在了一起,创造出了特有的对象模型(Qt Object Model)。一,Qt的基本框架在上一篇中,我们已经完成了Qt的安装和VS的环境配置。QT从入门到入土(一)——Qt5.14.2安装教程和VS2019环境配置在讲解对象树之前,我们先来熟悉一

2022-01-15 09:00:41 323

原创 QT从入门到入土系列教程(一)——Qt5.14.2安装教程和VS2019环境配置

引言24岁的某天,承载着周围人的关心,一路南下。天晴心静,听着斑马,不免对未来有些彷徨。但是呢,人生总要走陌生的路,看陌生的风景,所幸可以听着不变的歌,关心自己的人就那么多。就像是对庸常生活的一次越狱,路才刚刚开始。。。。

2022-01-11 14:03:24 3049

原创 Halcon教程第一讲 读取多张图片

第一种方法ImagePath:=[]ImagePath[0]:=‘E:/images1/a000.bmp’ImagePath[1]:=‘E:/images1/a001.bmp’ImagePath[2]:=‘E:/images1/a002.bmp’ImagePath[3]:=‘E:/images1/a003.bmp’ImagePath[4]:=‘E:/images1/a004.bmp’ImagePath[5]:=‘E:/images1/a005.bmp’ImagePath[6]:=‘E:/im

2021-12-25 10:39:42 2482 1

原创 OpenCV常用通道分离split()合并merge()与图像拼接hconcat(),vconcat()

直接上源码,有不懂或者要指教的可以给我留言。void QuickDemo::channel_demo(Mat& image){vector mv, images;split(image, mv);/imshow(“单通道蓝色”, mv[0]);imshow(“单通道绿色”, mv[1]);imshow(“单通道红色”, mv[2]);/Mat tempg, tempr, dstb, dstg, dstr, temp;mv[1].copyTo(tempg);mv[2].copyTo

2021-04-25 18:05:06 322

原创 OpenCV 利用分离(split)合成(merge),分别显示Mat图像中两两通道组合图

Mat src;src = imread(“E:/Project/img/123.jpg”);src1= imread(“E:/Project/img/dog.jpg”);namedWindow(“input”, 0);imshow(“input”, src);vector channel;split(src, channel);imshow(“B”, channel[0]);imshow(“G”, channel[1]);imshow(“R”, channel[2]);Mat tem

2021-04-09 00:49:30 302

原创 关于空间域到频率域的转换

频率 指的是空域中像素值 变化 的快慢的程度。举个简单的例子,假定我们只考虑RGB中的R,我们的图像是一维的,共有2^n个像素,这样,低频就对应着这2n个像素,编号从0到2n-1,的R颜色值变化的比较慢,即把R作为像素位置的函数画图,图像的波动比较小。高频就对应着这2n个像素,编号从0到2n-1,的R颜色值变化的比较快,即把R作为像素位置的函数画图,图像的波动比较大。低频的极端例子就是所有像素从0到2^n-1,的颜色值都是一个数,比如R=128全程。这样图像就是一条直线,没有一点波动,频率为0.高

2021-03-22 17:34:37 3103

原创 Canny边缘检测算法的实现

图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波。我们知道微分运算是求信号的变化率,具有加强高频分量的作用。在空域运算中来说,对图像的锐化就是计算微分。由于数字图像的离散信号,微分运算就变成计算差分或梯度。图像处理中有多种边缘检测(梯度)算子,常用的包括普通一阶差分,Robert算子(交叉差分),Sobel算子等等,是基于寻找梯度强度。拉普拉斯算子(二阶差分)是基于过零点检测。通过计算梯度,设置阀值,得到边缘图像。Canny边缘检测算子是一种多级检测算法。1986年由John F.

2021-03-22 10:06:19 565

原创 opencv之createTrackbar()详解

函数说明:createTrackbar()函数的函数原型为:CV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname,int* value, int count,TrackbarCallback onChange = 0, void* userdata = 0);trackbarname:这个参数用来给这个滚动条取一个名字;winname:这个参数用来指定你要吧这个滚动条用到那个窗口

2021-03-13 10:26:49 3478

原创 高斯模糊与图像卷积滤波

最新刚好遇到个需求是要求做高斯模糊的,虽然现有已经有一些框架可以提供调用,但关键还是要理解原理才行,思考的过程才是最重要的,高斯模糊的原理则与图像卷积滤波有些关系。目录大纲1.图像卷积滤波与高斯模糊2.高斯模糊实现与优化3.RenderScript的介绍与使用一.图像卷积滤波与高斯模糊1.1 图像卷积滤波对于滤波来说,它可以说是图像处理最基本的方法,可以产生很多不同的效果。以下图来说图中矩阵分别为二维原图像素矩阵,二维的图像滤波矩阵(也叫做卷积核,下面讲到滤波器和卷积核都是同个概念),以及

2021-03-08 20:53:00 733

原创 视觉图像处理中卷积核与滤波器的区别

卷积的目的是为了从输入中提取有用的特征。在图像处理中,有很多滤波器可以供我们选择。每一种滤波器帮助我们提取不同的特征。比如水平/垂直/对角线边缘等等。在CNN中,通过卷积提取不同的特征,滤波器的权重在训练期间自动学习。然后将所有提取到的特征“组合”以作出决定。卷积的优势在于,权重共享和平移不变性。同时还考虑到了像素空间的关系,而这一点很有用,特别是在计算机视觉任务中,因为这些任务通常涉及识别具有空间关系的对象。(例如:狗的身体通常连接头部、四肢和尾部)。单通道版本单个通道的卷积在深度学习中,卷积是元

2021-03-07 17:57:13 2085 1

Opencv图像处理视频课程(基础).zip

OpenCV3编程入门以当前最新版本的OpenCV最常用最核心的组件模块为索引,深入浅出地介绍了OpenCV2和OpenCV3中的强大功能、性能,以及新特性。书本配套的OpenCV2和OpenCV3双版本的示例代码包中,含有总计两百多个详细注释的程序源代码与思路说明。读者可以按图索骥,按技术方向进行快速上手和深入学习。 《OpenCV3编程入门》要求读者具有基础的C/C++知识,适合研究计算机视觉以及相关领域的在校学生和老师、初次接触OpenCV但有一定C/C++编程基础的研究人员,以及已有过OpenCV 1.0编程经验,想快速了解并上手OpenCV2、OpenCV3编程的计算机视觉领域的专业

2021-01-29

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

TA关注的人

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