`

“愚蠢的四天”---QT与OpenCV的结合

 
阅读更多

       长沙这阴暗的天气已经持续好几天了,我也在这见不到太阳的天空下混混沌沌地度过了艰难的四天。虽然我成功搞定了大学最后一个体侧,以后终于能坐在操场旁静静地看着人家跑步,但是,我却丝毫没有半点如释重负的感觉,取而代之的是一种“黑云压城城欲摧”的压迫感,我度过了“愚蠢”的四天,为啥呢?为啥呢?作为程序员来讲,你懂得。一定是太久没见到太阳了····

       这次想将openCV结合QT来将自己之前所做的一些些东西(或者说是建立在理解基础上的抄袭)结合到QT上,做一个类似于图像处理的软件,这样我相信更加有成就感,于是我就开始了······“愚蠢”的四天:

 

       第一篇      openCV、QT与VS的环境配置

       要敲代码没有问题,首先要搞定环境问题。主要有以下两种环境搭配形式:

       (1)VS作为编程软件,openCV、QT作为库导入VS进行编程;

       (2)QT Greator作为编程软件,openCV作为库导入其中进行编程。

 坑爹的从这里就开始了!我一开始安装的就是VS2015,是最新版本的,当时也是觉得最新的应该功能更齐全吧(现在想抽自己)。于是,我尝试使用方法(1),将openCV、QT导入VS2015中,openCV早就已经配置好了,现在就是配置QT了。

 

一、VS2015配置QT(失败)

 VS配置QT的一般步骤是(VS已经安装完成):

                    1>  官网上下载正确的QT,并且傻瓜式安装(唯一要注意的是最好安装路径不要有中文、空格、“program files”、“document”等字眼)(官网:www.qt.io/download/

                    2>  配置QT的环境变量。将环境变量Path添加该路径(请示各自情况而定):F:\QT\5.5\msvc2012\bin;(否则可能会出现某些文件找不到|虽然装了插件,但是VS不按套路响应)

                    3>  官网上下载正确的QT-add-VS插件,并且傻瓜式安装(与上述注意相同最好!)

                    4>  正确完成上述两个步骤后,打开VS,可以发现工具栏多出了 QT5(这里安装的是QT5)选项:

我们点击QT5选项,选择最后一个“Qt Options”,配置QT路径

 

这里选择你安装的qt路径,VS将自动检测,若不相符合(比如说你下载的qt是vs-mingw的,用在vs2015那就是不行的)配置将不成功。

配置完成之后,环境设置就算成功了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

听上去是不是很简单,对,是很简单。然而我使用的是VS2015,当我做到第三步的时候,qt-add-vs一直提醒我“···不能检测到vs200x···”,真的不知道是我的插件下错了还是为何。。。挣扎了好久,最后还是觉得····失败了

或许是我其中某些环节忽略了,但是,惨痛的结果还是告诉我一个道理:

                       新的,可能是最完善的,但不一定是最合适、最方便的

                       第一个吃螃蟹的人,往往也会被螃蟹伤得体无完肤。。。。

                       吃蟹有风险,下河需谨慎啊!

 

 

二、 QT creator 配置openCV编程(失败)

看到网上很多人都在说,为什么不用QT自带的QTCreator?这玩意编程起来也是很方便的,并且对于初学者来说,QT Creator是非常好的选择。好吧,既然如此,那我就试试吧!

其实QT配置openCV是非常容易的事情,我们可以看到QT Creator界面如下:

 这里有个test.pro的属性表,类似于VS配置openCV时也添加了一个属性表,但是QT Creator里这个属性表是本身就存在的,并且有内容,如下:


 为了配置openCV,我们只需添加如下语句即可:

 


 实际上就是将openCV的运行目录和库文件包括进来,本质上是跟VS配置openCV道理是一样的。这样简单配置之后,openCV就可以在QT Creator运行了!代码写的飞起啊,这个QT Creator的智能识别我感觉也是非常的舒服顺手,瞬间觉得自己就无敌了!

 

然而······

 

编译时没有问题的,我在QT Creator中写了一个C++控制台的程序,就简单的几行openCV的代码:

                                    IplImage* img = cvLoadImage("1.png");

                                    cvNamedWindow("img");

                                    cvShowImage("img", img);

编译完美通过,没有问题,当结果出来的时候,我泪崩了,出现了一个窗口,没有图片!

没有图片····

没有图片····

我没有放弃,换了几个图片试了试,还是没有图片。

机智的我推测是不是img没有加载进来,于是调用了一下img->width,于是···程序崩溃了!(强制中断)

此时的我已经无力吐槽,代码从头到脚就三行,哪能有错?于是我上网查询解决方案,在进行了大量的搜索之后,得出了一个可能得结论:

        “版本较低的openCV在QT Creator中是可以完美运行的,较高的版本需要自己编译openCV才行”

我……&*¥&……*&……&&&*……&&*(&*(*(……&&……¥……##%……R^&&*&*

我的openCV版本是2-4-8,算是比较新的,所以可能造成了不能识别(这里可能说的不太恰当,不是不能识别,从智能代码补全可以看出库已经导入进来了,但是遇到了什么问题目前不得而知)的问题。

好吧,于是我开始自己编译openCV:

其实编译过程并不复杂,如下:

(1).首先,得下载一个Cmake软件,编译openCV。打开Cmake软件,如下图所示:

 这里的第一栏“where is the source code”就是你openCV的安装路径,第二栏“where to build the banaries”就是编译之后的文件所在地,这个任意创建即可;

这里选择框中的一大堆东西,我们只需要再勾选“WITH OPENGL”和“WITH QT”即可,其他不要动!

选择好之后,我们点击Configure。

在出现 “Configure Done”后,我们点击Generate生成build的文件,出现“Generate Done”后,这一步我们就算完成了!很好,这一步看上去难度并不是很大(前面说的正确下载版本以及路径配置时前提哦!不然血的教训告诉大家是会错的)

接下来,我们进入“cmd”界面,将路径转到刚刚Cmake build完之后的目录下,我这里是D:\opencvmake243,输入mingw-make,于是系统开始编译该目录下的文件。。。。。。。。。。。。

0%

1%

4%

····

24%

我擦,卡住了。一看出现错误了!!!!!!

core/operations.hpp:4024: error: got 2 template parameters for `void cv::AlgorithmInfo::addParam(cv::Algorithm&, const char*, cv:: Ptr<_Tp2>&, bool, cv::  Ptr<_Tp2> (cv::Algorithm::*)(), void (cv::Algorithm::*)(const cv:: Ptr<_Tp2>&), const std::string&)'

查了解决方法,即进入operations.hpp,将4021那行的函数给删掉即可。(还有很多问题参考http://www.ebaina.com/bbs/thread-5328-1-1.html,这也让我意识到,问题还有可能出现)

然而····

它总是不按套路出牌,各个网站上提出的问题,它都没有出现,反而出现了如下问题:

 首先我想说的是,找这个错误在哪,我的眼睛都要瞎了。。。然后,其实错误具体是什么并不是关键,可以看到,犯错误的文件已经不是openCV了,而是QT,这让我很无奈了。最终搞了很久也没有搞定这个问题。使用QT Creator的办法也就此宣告失败。。。

 

三、VS2012+QT+openCV(成功)

最终我选择了妥协,下载了vs2012,老老实实的按照一中所述的方法进行配置,终于成功了!这里我就不详细介绍了一个是一中叙述很详细,二是,我累了,心累了。。。。

 

 

其实还好,这样一看下来,会发现什么问题其实都只解决了一部分,说白了就是什么问题都没有解决,只是选择了一种妥协的办法来让我的学习进行下去。可是,乐观的我想想,这未尝不是好事呢,虽然很多的小问题都没有解决,但是妥协了之后也许可以解决最终的问题,牺牲小问题、解决大问题的这种做法,why not?以后的学习生活一定会碰到很多不顺利的地方,也许这里卡住了,换个方法就豁然开朗了呢!

恩,真会自我安慰。。。。

 

                                             第二篇     快速入门QT

 

一、基本原理理解-------信号与槽机制

 

要想尽快入门QT,那么掌握信号与槽机制是非常有必要的,这是QT区别于其他编程语言的独特之处。

类似于Java里的“事件”,信号与槽机制实际上就是一个触发与响应的机制,下面简单谈下我的理解以及基本的应用:

             信号,实际上就是一个触发器,提供信号的对象有很多,用得最多、最简单的一种就是按钮了,我们往往按下按钮,想要触发某种信号时,这时按下的这个动作就是一个信号!事实上几乎所有的控件都有他的信号,这个信号可以是自己定义的,也有QT中已经写好的,比如说,QT中自带的信号如下:

第一个是click(),实际上就是按下按钮后的信号。这些自带的信号不用自己再作定义,若想自行定义信号,则在头文件里,类的成员中加上如下:

                           public signals:

                                                   void mySignal();

然后再在.cpp文件中定义这个信号成员函数,注意,这里信号的类型只能是void。

 

槽实际上就是一个响应,在信号触发成功后,接下来的任务就是槽响应了!实际上如信号,QT中也定义了自己的槽,如:

 如果要自己定义槽,则在头文件中添加槽成员函数:

                                   public slots:

                                                 void mySlots();

再在.cpp文件中定义这个槽函数即可。

 

很关键的一点就是,虽然定义了信号和槽,那么他们如何连接呢?比如说我有一个按钮btn和标签label,想让按钮点击后标签消失,如何将这两个关联起来呢?QT提供了一个连接函数:

           

bool QObject::connect ( const QObject * sender, const char * signal, 
		 const QObject * receiver, const char * member ) [static]

解读出来实际上是     连接(发送对象,信号函数,接受对象,槽函数)

那么我们要达到目的,就可以在构造函数中添加一下联系:

                connect (btn, click(), label, destroy());

以上就是整个信号与槽机制的内容。

 

 

二、简单应用---与openCV结合显示图片

 

接下来,我们要结合openCV做一个小小的项目:点击按钮,显示图片!点击这个事件我们知道要用到信号与槽机制,那么还需要就是了解QT显示图像的机制。QT使用Qimage显示图像,而openCV使用IplImage显示图像,那么我们要进行转换:

QImage test2012::ImageCV2Qimg(IplImage* img)
{
 assert(img!=NULL);
 int h = img->height;
 int w = img->width;
 int channel = img->nChannels;
 QImage qimg = QImage(w, h, QImage::Format_RGB32);

 for(int i=0;i<h;i++) 
    { 
        for(int j=0;j<w;j++) 
        { 
            int r,g,b; 
            if(channel == 3) 
            { 
                b=(int)CV_IMAGE_ELEM(img,uchar,i,j*3+0); 
                g=(int)CV_IMAGE_ELEM(img,uchar,i,j*3+1); 
                r=(int)CV_IMAGE_ELEM(img,uchar,i,j*3+2); 
            } 
            else if(channel == 1) 
            { 
                b=(int)CV_IMAGE_ELEM(img,uchar,i,j); 
                g=b; 
                r=b; 
            } 
            qimg.setPixel(j,i,qRgb(r,g,b)); 
        } 
    } 
 return qimg;
}

Qimage的存储顺序是RGB,而IplImage的存储顺序是BGR,所以我们要按顺序恢复。

 

使用QT设计大师添加信号与槽机制:

打开.ui文件,QT设计大师将自动弹出,我们可以方便的在里面配置信号与槽机制,首先在放置想要的控件,这里是放置一个按钮;接着点击工具栏上的编辑信号\槽,在按钮上拖动下来,于是会自动弹出信号与槽机制的选择框,可以选择QT自带的,也可以手动添加自己写的函数: 

 

这里的showMyImage是我自己定义的槽函数:

void test2012::ShowMyImage()
{
 img = cvLoadImage("11.png");
 //IplImage* temp = cvCreateImage(cvGetSize(img), 8, 4);
 //cvCvtColor(img, temp, CV_BGR2BGRA);
 QImage qimg = ImageCV2Qimg(img);
 //QLabel *label = new QLabel(this); 
    this->label->setPixmap(QPixmap::fromImage(qimg));   
    this->label->resize(label->pixmap()->size()); 
    this->label->show();
}

这里Qimage是使用一个标签label显示图像,显示方法如上,还有Qpaint等其他的显示方法,后续介绍。程序到这里就编写完成,点击按钮,得到效果:
                        

 

于是,“愚蠢”的四天,我就干了点这事。当然,还稍许研究了下排序,稍后会写上。
 

         

 

 

 

      

  • 大小: 5.8 KB
  • 大小: 16.7 KB
  • 大小: 24.1 KB
  • 大小: 13.1 KB
  • 大小: 12.9 KB
  • 大小: 42 KB
  • 大小: 81.6 KB
  • 大小: 16.9 KB
  • 大小: 17.4 KB
  • 大小: 57.7 KB
  • 大小: 85.6 KB
分享到:
评论

相关推荐

    QT+OPENCV实现拍照

    这次想将openCV结合QT来将自己之前所做的一些些东西(或者说是建立在理解基础上的抄袭)结合到QT上,做一个类似于图像处理的软件,这样我相信更加有成就感,于是我就开始了······“愚蠢”的四天:QT通过OPENCV...

    技嘉Z97X UD3H F9 增加NVME启动功能

    亲测可用

    《基于YOLOv8的音响设备识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    毕业设计物联网实战项目基于mqttd-centos7-v2.3.11.zip 配置的emqtt服务器,配套金大万翔物联网管理平台.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    毕设单片机实战项目基于ESP8266的家庭版简易开关.zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    毕设单片机实战项目基于ESP8266制作的一个局域网关灯神器,还有一个OLED,用于显示实时时间和最近三天的天气信息。.zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    毕业设计物联网实战项目基于树莓派wifi的物联网项目.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    IDE的护眼的主题的套件

    IDE护眼主题套件

    【新能源汽车】基于Matlab/Simulink的增程式电动车动力系统仿真模型设计与优化:功率跟随控制及能量流管理

    内容概要:文章详细介绍了基于Matlab/Simulink构建的增程式电动车仿真模型。该模型由电池、电机、发动机、整车动力学、控制策略和驾驶员模块六大组件构成,重点在于各模块间的能量流动逻辑。文中特别强调了功率跟随控制策略,通过PID闭环控制使发动机功率与电池需求动态匹配,优化了燃油经济性和SOC控制精度。此外,模型采用开放式架构,所有参数通过m脚本集中管理,便于修改和扩展。文章展示了模型在典型工况下的性能表现,并突出了其在科研和工程应用中的灵活性和实用性。; 适合人群:对新能源汽车技术感兴趣的工程师、研究人员以及高校相关专业师生。; 使用场景及目标:①用于研究增程式电动车的能量管理策略;②作为教学案例帮助学生理解复杂系统的建模方法;③为实际工程项目提供可复用的仿真平台。; 阅读建议:读者应重点关注模型的架构设计和关键控制算法实现,同时结合提供的代码片段进行实践操作,以便更好地掌握增程式电动车的工作原理及其优化方法。

    51a30-main.zip

    51a30-main.zip

    【Java数据库技术】索引类型与事务特性详解:提升SQL查询性能与数据一致性管理

    内容概要:本文详细介绍了多种类型的数据库索引及其应用场景,包括普通索引、唯一性索引、单个索引、复合索引、聚簇索引、非聚簇索引、主索引、外键索引、全文索引和空间索引。每种索引都有其独特的定义、要点和适用场景,并附有具体的SQL代码示例。此外,文章还对比了InnoDB和MyISAM两种存储引擎的特点,解释了脏读、不可重复读、可重复读和幻读的概念,并讨论了SQL优化的方法以及数据库事务的ACID特性。 适合人群:具备一定数据库基础知识的开发者、数据库管理员以及参与数据库设计和优化的技术人员。 使用场景及目标:①帮助开发者选择合适的索引类型以提高查询效率;②理解不同存储引擎的特点,选择最适合应用场景的存储引擎;③掌握事务隔离级别的概念,避免数据不一致问题;④学习SQL优化技巧,提升数据库性能;⑤理解ACID特性,确保数据库操作的一致性和可靠性。 阅读建议:本文内容较为全面且深入,建议读者结合实际项目需求,重点理解不同类型索引的应用场景,掌握SQL优化的基本原则,并熟悉事务处理的最佳实践。

    【MATLAB优化算法】基于MATLAB的优化算法实现与应用:涵盖梯度下降、线性规划、非线性规划及智能优化算法

    内容概要:本文详细介绍了MATLAB中优化算法的实现方法,涵盖确定性算法(如梯度下降法)和随机性算法(如遗传算法、粒子群优化)。文章首先讲解了梯度下降法和MATLAB优化工具箱的应用,展示了如何使用fmincon解决约束优化问题。接着,文章深入探讨了线性规划、非线性规划和多目标优化的理论和实践,提供了具体的MATLAB代码示例。此外,文中还介绍了遗传算法、粒子群优化和模拟退火算法的原理及应用,并通过实例展示了这些算法在实际问题中的使用。最后,文章讨论了优化算法在工程、金融和机器学习领域的高级应用,以及调试和优化的常见策略。 适合人群:具备一定编程基础,对优化算法感兴趣的工程师、研究人员和学生。 使用场景及目标:①理解优化算法的基础理论和实现方法;②掌握MATLAB优化工具箱的使用,解决线性、非线性、多目标优化问题;③学习遗传算法、粒子群优化和模拟退火算法的具体应用;④提高优化算法的性能和可靠性,解决实际工程、金融和机器学习问题。 阅读建议:本文内容丰富,涉及多种优化算法及其MATLAB实现,建议读者先掌握基本的优化理论和MATLAB编程基础,再逐步深入学习各类算法的具体应用。在学习过程中,结合提供的代码示例进行实践,并尝试调整参数以优化算法性能。

    python for appium ui automate test, it is something to update.

    this is for myself learn coding, change a pc debug.

    p111基于django的企业员工管理系统.zip

    项目资源包含:可运行源码+sql文件 适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 项目具有较高的学习借鉴价值,也可拿来修改、二次开发。 有任何使用上的问题,欢迎随时与博主沟通,博主看到后会第一时间及时解答。 开发语言:Python 框架:django Python版本:python3.8 数据库:mysql 5.7 数据库工具:Navicat 开发软件:PyCharm 浏览器:谷歌浏览器

    毕设单片机实战项目基于esp8266的太空人时钟小电视.zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    电力电子MMC型STATCOM/SVG载波移相调制与电压均衡控制技术详解:从理论到实战调试经验分享

    内容概要:本文深入探讨了MMC型STATCOM/SVG的核心技术和调试技巧,重点讲解了载波移相调制(CPS-PWM)和电压均衡控制两大关键技术。载波移相调制通过为每个子模块设置不同的载波相位差,有效降低谐波含量并优化开关频率。电压均衡则分为桥臂内、桥臂间和相间三个层次,分别采用动态排序、比例控制和零序电压注入等方法,确保系统稳定运行。文章还分享了多个实战经验,如低压调试、红外热像仪检测以及避免参数设置不当引发的问题。; 适合人群:从事电力电子领域,特别是参与STATCOM/SVG项目的设计、开发和调试的技术人员。; 使用场景及目标:①理解MMC型STATCOM/SVG的工作原理和技术细节;②掌握载波移相调制的具体实现方法;③学习电压均衡控制的各种策略及其应用场景;④获取实际调试过程中常见问题的解决方案。; 阅读建议:本文涉及大量技术细节和实战经验,建议读者结合实际项目进行阅读,重点关注载波移相调制和电压均衡控制的具体实现,并参考提供的代码片段进行实践。

    liangmmm_finalll.scdoc

    liangmmm_finalll.scdoc

    区块链开发中Solidity语言的关键特性与应用解析

    内容概要:本文详细介绍了Solidity语言的核心概念和语法特性,涵盖结构体、函数修改器、事件、类型系统、数组、映射、操作符、合约可见性、构造函数、抽象合约、接口、继承、控制结构、异常处理和keccak256哈希函数等内容。通过这些知识点的讲解,帮助开发者理解如何构建高效、安全的智能合约。; 适合人群:对区块链开发感兴趣,尤其是希望深入了解以太坊智能合约开发的初学者及有一定编程基础的研发人员。; 使用场景及目标:①掌握Solidity语言的基本语法和高级特性,如结构体、函数修改器、事件等;②理解合约的可见性、继承、接口等面向对象编程特性;③学会使用keccak256等安全机制保障智能合约的安全性;④能够运用控制结构和异常处理编写健壮的合约逻辑。; 阅读建议:建议读者从基础语法开始逐步深入,结合实际案例进行练习。尤其要注意合约的安全性和性能优化,避免常见的漏洞和错误。在学习过程中,应多参考官方文档和其他优质资料,不断巩固和拓展知识体系。

    原型模式课上代码.zip

    原型模式课上代码.zip

    【锂电池管理】基于Simulink的双向DC-DC主动均衡电路与模糊控制算法:实现高效SOC差异调控

    内容概要:文章介绍了利用Simulink搭建锂电池组主动均衡系统的原理与实现方法。通过双向DC-DC主动均衡电路和模糊控制算法,解决了储能项目中电池包SOC(荷电状态)差异过大的问题。文中详细解释了关键代码逻辑,包括均衡状态切换、模糊控制器规则配置以及动态子系统使能技术的应用。特别提到当SOC最大差值超过设定阈值时,系统会自动启动均衡,并根据差值大小智能调整均衡电流。仿真结果显示,在处理突发状况(如某电池SOC突然下降)时,该系统能在短时间内恢复平衡。此外,文章还分享了调试过程中的一些实用技巧,如设置合理的均衡电流限值。; 适合人群:从事锂电池管理系统研发的技术人员,尤其是有一定MATLAB/Simulink使用经验的工程师。; 使用场景及目标:①解决储能系统中锂电池组SOC不一致的问题;②优化现有均衡策略,提高均衡效率;③学习如何在Simulink中实现复杂控制算法。; 其他说明:本文不仅提供了详细的代码示例和技术细节,还通过生动的比喻帮助读者更好地理解复杂的控制逻辑。建议读者在实践中结合理论知识进行调试和验证。

Global site tag (gtag.js) - Google Analytics