精华内容
下载资源
问答
  • 完整的蓝屏错误代码大全详解

    万次阅读 多人点赞 2018-07-01 16:43:56
    完整的BSOD错误代码列表从STOP 0x1到STOP 0xC0000221一个死机(BSOD)的蓝屏,技术上称为一个STOP错误,若在Windows遭受了严重的错误,被迫“停”的问题。在任何Windows操作系统中都会出现BSOD错误,包括Windows 10...

    完整的BSOD错误代码列表从STOP 0x1到STOP 0xC0000221

    一个死机(BSOD)的蓝屏,技术上称为一个STOP错误,若在Windows遭受了严重的错误,被迫“停”的问题。

    在任何Windows 操作系统中都会出现BSOD错误,包括Windows 10,Windows 8,Windows 7,Windows Vista,Windows XP甚至Windows 98/95。

    由于蓝屏错误让您别无选择,只能重新启动,故障排除可能很困难。幸运的是,几乎每个STOP错误都包含一个基于十六进制的STOP代码,可用于研究修复程序。

     

    以下是关于单个STOP错误信息,包括每个STOP代码的含义以及我们在其他地方找到的关于该蓝屏错误的任何故障排除信息。

    蓝屏分析工具:

    展开全文
  • CAN的报文格式 在总线中传送的报文,每由7部分组成。CAN协议支持两种报文格式,其唯一的...RTR位标明是数据还是请求,在请求中没有数据字节。 控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格...
    1. CAN的报文格式

      在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。

      在标准格式中,报文的起始位称为帧起始(SOF),然后是由11位标识符和远程发送请求位(RTR)组成的仲裁场。RTR位标明是数据帧还是请求帧,在请求帧中没有数据字节。

      控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为0~8个字节,其后有一个检测数据错误的循环冗余检查(CRC)。

      应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。

      报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。

      如图11所示,具体某一位或某几位下面会详细介绍。

      图11 CAN总线报文结构

    2. 数据帧

      数据帧是使用最多的帧,结构上由7段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。

      数据帧是由:帧起始,仲裁断,控制端,数据段,CRC段,ACK段和帧结束构成。

      如图21所示(具体的帧结构下面会详细介绍)。

      图2–1数据帧类型及结构

    3. 帧起始和帧结束

      帧起始:由单个显性位组成,总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。

      帧结束:由7个连续的隐形位组成。

      (注:显性电平和隐性电平是相对于CAN_H和CAN_L而言的差分信号电平,并非TTL电平上的高低电平,需要注意)如图2-2所示。

       

      图2–2帧起始和帧结束

    4. 仲裁段

      CAN-bus是如何解决多个节点同时发送数据,即总线竞争的问题?该问题由仲裁段给出答案。

      CAN-bus并没有规定节点的优先级,但通过仲裁段帧ID规定了数据帧的优先级。根据CAN2.0标准版本不同,帧ID分为11位和29位两种。如图23所示

       

      图2–3数据帧结构

      如图24所示CAN控制器在发送数据的同时监测数据线的电平是否与发送数据对应电平相同,如果不同,则停止发送并做其他处理。

      图2–4仲裁处理

      假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是(如图16所示):

      图2–5仲裁机制

      从该分析过程得出结论是:帧ID值越小,优先级越高;

      对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理

    5. 控制段

      控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成如图17所示。

      图2–6数据帧结构

    6. 数据段

      一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合如图27所示。

      图2–7数据段

      数据量小,发送和接收时间短,实时性高,被干扰的概率小,抗干扰能力强。

    7. CRC段

      CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。 CRC校验段由15位CRC值和1位CRC界定符构成如图28所示。

      图2–8CRC段

    8. ACK段

      当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平如图29所示。

      图2–9 ACK段

    9. 远程帧

      与数据帧相比,远程帧结构上无数据段,由6个段组成,同理分为标准格式和扩展格式,且RTR位为1(隐性电平)如图31所示。

      图3–1远程帧结构

      如下图所示由于数据帧的RTR位为显性电平,远程帧的RTR位为隐性电平。

      所以帧格式和帧ID都相同情况下,数据帧的优先级比远程帧优先级高如图32所示:

      图3–2数据帧于远程帧仲裁机制

       

      图3–3数据帧远程帧比较

      数据帧与远程帧的区别如图33所示。

       

    10. 错误帧

      尽管CAN-bus是可靠性很高的总线,但依然可能出现错误;CAN-bus的错误类型共有5种(如图41所示)。

      图4–1错误帧类型

      当出现5种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识如图42所示。

      图4–2错误帧电平结构

      为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus规定了节点的3种状态及其行为如图43所示。

      图4–3错误处理机制

      (注:这些错误处理的机制是由硬件自主完成的这样做的目的就是只要CAN在收到数据肯定是正确的数据)。

       

    11. 过载帧与帧间隔

    12. 过载帧

      当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成如所示图51。

      图5–1过载帧结构

      由于存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过6个位的现象如所示图52。

      图5–2过载帧具体结构

    13. 帧间隔

      帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。

      帧间隔过后,如果无节点发送帧,则总线进入空闲。

      帧间隔过后,如果被动错误节点要发送帧,则先发送8个隐性电平的传输延迟,再发送帧。

    14. CAN总线发送总流程

      CAN-bus整个链路层处理数据的流程是如图61所示:

      图6–1CAN总线发送总流程

       

    15. 参考资料

      《项目驱动--CAN-BUS现场总线基础教程----周立功,黄晓清》。

      《现场总线技术及其应用第二版–清华大学出版社》。

    展开全文
  • 遇到一个非常奇怪的问题,我用modbus slave测试我的上位机程序的时候,我发的命令是03,modbus slave给我返回的命令是08导致我解析的时候出现错误,是我哪里设置错误了吗?请哪位大侠帮忙解答。谢谢。
  • VISA错误代码

    千次阅读 2013-09-09 15:50:33
    VISA函数和VI服务器属性及方法可返回下列错误代码。关于解决LabVIEW错误的更多信息见知识库。 代码 说明 −1073807360 未知系统错误(其它错误)。 −1073807346 会话...
     
    

    VISA函数和VI服务器属性及方法可返回下列错误代码。关于解决LabVIEW错误的更多信息见知识库

    代码

    说明

    −1073807360

    未知系统错误(其它错误)。

    −1073807346

    会话或对象引用非法。

    −1073807345

    资源被锁定,无法获取指定的锁定类型,无法实现指定操作。

    −1073807344

    搜索的表达式非法。

    −1073807343

    位置信息不足或系统中不存在设备或资源。

    −1073807342

    指定的资源引用非法。解析出错。

    −1073807341

    无效访问模式。

    −1073807339

    超时在操作结束前已失效。

    −1073807338

    VISA驱动关闭会话句柄或对象引用失败。可能由于以下原因出错:释放内部或系统资源时出错、网络连接错误、底层驱动或操作系统错误。

    −1073807333

    指定的等级无效。

    −1073807332

    指定的工作标识符无效。

    −1073807331

    引用资源未定义或不支持所指定的属性。

    −1073807330

    属性的特定状态无效,或者所定义的资源不支持该状态。

    −1073807329

    指定的属性为只读。

    −1073807328

    该资源不支持所指定的锁定类型。

    −1073807327

    用于指定资源的访问键无效。

    −1073807322

    资源不支持指定的事件类型。

    −1073807321

    指定机制无效。

    −1073807320

    处理程序未安装。

    −1073807319

    所给处理程序引用无效。

    −1073807318

    指定的事件说明无效。

    −1073807315

    指定类型的事件队列已溢出。通常原因为之前事件尚未被关闭。

    −1073807313

    必须启用指定事件才可以进行接收。

    −1073807312

    传输被用户中止。

    −1073807308

    传输时违反RAW写入协议。

    −1073807307

    传输时违反RAW读取协议。

    −1073807306

    传输时设备提交一个输出协议错误。

    −1073807305

    传输时设备提交一个输入协议错误。

    −1073807304

    传输时发生总线错误。

    −1073807303

    无法对异步操作进行排队,因为当前已存在该操作。

    −1073807302

    由于安装程序非法(属性已被设置为不一致状态),将无法开始操作。

    −1073807301

    无法对异步操作进行排队(通常原因为没有启用I/O结束事件或会话队列中空间不足)。

    −1073807300

    执行必需内存分配所需系统资源不足。

    −1073807299

    指定缓冲区掩码无效。

    −1073807298

    由于I/O错误,将无法执行相应操作。

    −1073807297

    格式字符串中存在非法格式说明符。

    −1073807295

    格式字符串中存在不支持的格式说明符。

    −1073807294

    指定的触发线当前正在使用。

    −1073807290

    VISA应用不支持所指定的模式。

    −1073807286

    该会话并没有接收到服务请求。

    −1073807282

    指定的地址空间无效。

    −1073807279

    指定的偏移量无效。

    −1073807278

    指定的访问宽度无效。

    −1073807276

    无法从硬件访问指定的偏移量。

    −1073807275

    源宽度和目标宽度不同时无法支持。

    −1073807273

    当前尚未映射指定的会话。

    −1073807271

    正在处理之前响应,这将导致多次查询引起的错误。

    −1073807265

    未检测到侦听器(NRFDNDAC均被置为无效)。

    −1073807264

    控制器当前并未控制与本会话相关的接口。

    −1073807263

    与本会话相关的接口不属于系统控制器。

    −1073807257

    所给会话句柄或对象引用不支持该操作。

    −1073807256

    之前调用仍在处理某个中断。

    −1073807254

    传输时发生奇偶错误。

    −1073807253

    传输时发生成帧错误。

    −1073807252

    传输时发生超出限度错误。在下一个字符到达之前,未从硬件读取该字符。

    −1073807250

    从触发源至触发目标的路径当前未被映射。

    −1073807248

    指定的偏移量未根据操作的访问宽度正确对齐。

    −1073807247

    指定的用户缓冲区非法或者无法访问所需大小。

    −1073807246

    资源合法但VISA当前无法对其进行访问。

    −1073807242

    该硬件不支持指定的宽度。

    −1073807240

    部分未知参数的值非法。

    −1073807239

    指定协议无效。

    −1073807237

    所指定的窗口大小无效。

    −1073807232

    所指定的会话当前包含一个映射窗口。

    −1073807231

    所给操作未实施。

    −1073807229

    指定的长度无效。

    −1073807215

    指定的模式无效。

    −1073807204

    当前会话无法锁定该资源。

    −1073807202

    无法定位或加载VISAVISA所需的代码库。这通常是因为系统上未安装所需的驱动程序。

    −1073807201

    接口无法产生所需等级或带所需状态ID值的中断。

    −1073807200

    行参数指定的值无效。

    −1073807199

    打开指定文件时发生错误。可能原因为无效路径或缺少访问权限。

    −1073807198

    执行特定文件的I/O操作时出现错误。

    −1073807197

    VISA应用不支持某个指定行、触发源或触发目标,或者行组合的映射非法。

    −1073807196

    所给事件类型不支持特定机制。

    −1073807195

    接口类型非法,但未配置指定的接口数量。

    −1073807194

    给定会话的连接已丢失。

    −1073807193

    远程机器不存在或无法接受任何连接。如远程机器中已安装并运行NI-VISA服务器,可能使用不兼容版本或已侦听其它端口。

    −1073807192

    访问资源或远程机器被拒绝。可能原因为当前用户或机器缺少足够权限。

    0

    操作完成。

    1073676290

    指定事件已为至少一个特定机制启用。

    1073676291

    指定事件已为至少一个特定机制禁用。

    1073676292

    操作成功完成,但队列已经为空。

    1073676293

    已读取指定的结束字符。

    1073676294

    传输的字符数量与所要求的输入计数相同。可能可使用更多数据。

    1073676300

    VISA接收指定类型的事件信息已超出配置队列大小。

    1073676407

    指定的配置不存在或无法加载。将使用VISA默认设置。

    1073676413

    成功打开会话,但指定地址的设备未响应。

    1073676414

    从触发源至触发目标的路径已被映射。

    1073676416

    等待接收事件通知已成功中止。至少存在一个或多个由inEventType指定的事件发生类型可用于本会话。

    1073676418

    指定对象引用已反初始化。

    1073676420

    虽然属性的指定状态合法,但当前资源应用不支持该状态。

    1073676421

    无法解析传递至该操作的状态代码。

    1073676424

    不支持指定的I/O缓冲区。

    1073676440

    成功处理事件。在本会话中不要调用其它事件处理器。

    1073676441

    操作成功完成,本会话已嵌套共享锁。

    1073676442

    操作成功完成,本会话已嵌套排它锁。

    1073676443

    操作成功完成,但实际上操作属于同步而不是异步。

    1073676457

    操作成功,但一个低层驱动没有实现扩展功能。

    −1073807202

    无法定位或加载VISAVISA所需的代码库。这通常是因为系统上未安装所需的驱动程序。

     

     

    展开全文
  • 设计PCM30基群同步电路 电路功能说明: 1.输入码流DATA,速率为2.04Mb/S;每256bit,其中前8bit为同步码;偶数同步码为10011011...3.系统处于同步态后,当连续四检出的同步码均错误,则系统转为失步态
  • 主要介绍四种运动目标检测的算法代码,每段代码博主实测可运行。当前主流的混合高斯背景模型,VIBE算法代码转载自他处。另外GMG算法,KNN算法在朱伟的书中有讲

    主要介绍四种运动目标检测的算法代码,每段代码博主实测可运行。当前主流的混合高斯背景模型,VIBE算法代码转载自他处。另外GMG算法,KNN算法在朱伟的书中也有讲,opencv3.0中,有专门的背景模型类BackgroundSubtractor。详情请下载朱伟《图像处理编程实例》源代码–下载资源

    原理在另一篇文章中有些《运动目标检测
    1、帧间差分法求前景
    帧间差分主要思想为两帧图像灰度化后相减得绝对值函数矩阵,然后二值化(注意阈值选择),得到前景图像。

    #include "stdafx.h"
    #include"opencv2\opencv.hpp"
    #include <opencv2/highgui/highgui.hpp>  
    #include <opencv2/imgproc/imgproc.hpp>  
    #include <opencv2/core/core.hpp> 
    using namespace cv;
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
        Mat img_src1, img_src2, gray1, gray2, gray_diff;
        int thvalue = 30;
    
        img_src1 = imread("F:\\毕业论文相关\\机场视频\\图片5帧\\density_img_5.jpg");
        img_src2 = imread("F:\\毕业论文相关\\机场视频\\图片5帧\\density_img_30.jpg");
        if (!img_src1.data || !img_src2.data)
            return -1;
        cvtColor(img_src1, gray1, CV_RGB2GRAY);
        cvtColor(img_src2, gray2, CV_RGB2GRAY);
        Mat img_dst(img_src1.rows, img_src1.cols, CV_8UC1);
        IplImage* Tsrcimage = &IplImage(gray1);//取指针
        IplImage* Tdstimage = &IplImage(gray2);
        IplImage* Tdif = &IplImage(img_dst);
    
        cvAbsDiff(Tsrcimage, Tdstimage, Tdif);//背景相减得灰度图
        cvThreshold(Tdif, Tdif, thvalue, 255, CV_THRESH_BINARY); //如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0;
        cvShowImage("foreground", Tdif);
        //imshow("foreground", img_dst);
        waitKey();
    
        return 0;
    }

    2、三帧差分法求前景
    第二帧减第一帧,第三帧减第二帧,结果相加,得到三帧差分图像。

    #include "stdafx.h"
    #include"opencv2\opencv.hpp"
    #include <opencv2/highgui/highgui.hpp>  
    #include <opencv2/imgproc/imgproc.hpp>  
    #include <opencv2/core/core.hpp> 
    using namespace cv;
    using namespace std;
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        Mat img_src1, img_src2, img_src3;
        Mat gray1, gray2, gray3;
    
        int thvalue = 30;
    
        img_src1 = imread("F:\\毕业论文相关\\机场视频\\图片5帧\\density_img_5.jpg");
        img_src2 = imread("F:\\毕业论文相关\\机场视频\\图片5帧\\density_img_40.jpg");
        img_src3 = imread("F:\\毕业论文相关\\机场视频\\图片5帧\\density_img_65.jpg");
        if (!img_src1.data || !img_src2.data)
            return -1;
        cvtColor(img_src1, gray1, CV_RGB2GRAY);
        cvtColor(img_src2, gray2, CV_RGB2GRAY);
        cvtColor(img_src3, gray3, CV_RGB2GRAY);
    
        Mat result1(img_src1.rows, img_src1.cols, CV_8UC1);
        Mat result2(img_src1.rows, img_src1.cols, CV_8UC1);
        Mat gray_diff(img_src1.rows, img_src1.cols, CV_8UC1);
    
        IplImage* Tgray1 = &IplImage(gray1);//取指针
        IplImage* Tgray2 = &IplImage(gray2);
        IplImage* Tgray3 = &IplImage(gray3);
        IplImage* Tresult1 = &IplImage(result1);
        IplImage* Tresult2 = &IplImage(result2);
        IplImage* Tdif = &IplImage(gray_diff);
    
        cvAbsDiff(Tgray1, Tgray2, Tresult1);//背景相减得灰度图
        cvAbsDiff(Tgray2, Tgray3, Tresult2);//背景相减得灰度图
    
        cvThreshold(Tresult1, Tresult1, thvalue, 255, CV_THRESH_BINARY); //如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0;
        cvThreshold(Tresult2, Tresult2, thvalue, 255, CV_THRESH_BINARY);
    
        cvAdd(Tresult1, Tresult2,Tdif);
    
        cvShowImage("foreground", Tdif);
        cvErode(Tdif, Tdif);   //腐蚀  
        cvShowImage("腐蚀后", Tdif);
        cvDilate(Tdif, Tdif);  //膨胀  
        cvShowImage("膨胀后", Tdif);
    
        //imshow("foreground", img_dst);
        waitKey();
    
        return 0;
    }
    
    

    3、混合高斯背景模型实现

    // 功能:代码 9-5 高斯混合背景建模
    // 作者:朱伟 zhu1988wei@163.com
    // 来源:《OpenCV图像处理编程实例》
    // 博客:http://blog.csdn.net/zhuwei1988
    // 更新:2016-8-1
    // 说明:版权所有,引用或摘录请联系作者,并按照上面格式注明出处,谢谢。// 
    #include "opencv2/imgcodecs.hpp"
    #include "opencv2/imgproc.hpp"
    #include "opencv2/videoio.hpp"
    #include <opencv2/highgui.hpp>
    #include <opencv2/video.hpp>
    #include <iostream>
    #include <sstream>
    using namespace cv;
    using namespace std;
    Mat frame; 
    Mat fgMaskMOG2; 
    Ptr<BackgroundSubtractor> pMOG2;
    int keyboard; 
    void processVideo(string videoFilename) 
    {
        // 视频获取
        VideoCapture capture(videoFilename);
        if(!capture.isOpened())
        {
            // 输出视频文件打开错误信息
            cerr << "Unable to open video file: " << videoFilename << endl;
            exit(EXIT_FAILURE);
        }
        // 按下q键和esc退出
        while( (char)keyboard != 'q' && (char)keyboard != 27 )
        {
            // 读取当前帧
            if(!capture.read(frame)) 
            {
                cerr << "Unable to read next frame." << endl;
                cerr << "Exiting..." << endl;
                exit(EXIT_FAILURE);
            }
            // 图像尺寸缩小
            cv::resize(frame, frame,cv::Size(), 0.25,0.25);
            //  背景模型生成
            pMOG2->apply(frame, fgMaskMOG2);
            // 输出当前帧号
            stringstream ss;
            rectangle(frame, cv::Point(10, 2), cv::Point(100,20),
                cv::Scalar(255,255,255), -1);
            ss << capture.get(CAP_PROP_POS_FRAMES);
            string frameNumberString = ss.str();
            // 左上角显示帧号
            putText(frame, frameNumberString.c_str(), cv::Point(15, 15),
                FONT_HERSHEY_SIMPLEX, 0.5 , cv::Scalar(0,0,0));
            // 输出结果
            imshow("Frame", frame);
            imshow("FG Mask MOG 2", fgMaskMOG2);
            keyboard = waitKey(30);
        }
        capture.release();
    }
    int main(int argc, char* argv[])
    {
        // 创建背景建模类
        pMOG2 = createBackgroundSubtractorMOG2(); 
        string inputPath = "F:\\毕业论文相关\\机场视频\\机场.avi";
        processVideo(inputPath);
        return 0;
    }
    

    4、vibe算法

    (算法程序出处找不到了,如果恰好作者看到,留言一下我给加上,实在抱歉。)
    主函数代码如下

    #include "stdafx.h"
    #include <opencv2/opencv.hpp>
    #include "highgui.h"
    #include "hanshu.h"
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    
    int nFrmNum = 0;//记录帧数
    int Width;//记录帧的宽度
    int Height;//记录帧的高度
    int FrameRate;//记录视频帧率
    
    int main(int argc, char* argv[])
    {
        IplImage* pFrame = NULL; CvMat* pFrameMat = NULL;//pFrame对象
        IplImage* pAfter = NULL; CvMat* pAfterMat = NULL;//保存pFrame对应的灰度图像
        IplImage* segMap = NULL; CvMat* segMat = NULL;//保存处理后的信息
    
        //要读取的视频文件和保存的视频文件路径
        char* openfile = "F:\\毕业论文相关\\机场视频\\密度人群.ts";
        char* outfile = "E:\\View004.avi";//检测结果输出位置
        char filename[100];//保存的图像位置和名称
    
        //打开视频文件
        CvCapture* pCapture = cvCreateFileCapture(openfile);
        if (pCapture == NULL) {
            cout << "video file open error!" << endl;
            return -1;
        }
    
        //获取视频相关信息,帧率和大小
        double fps = cvGetCaptureProperty(pCapture, CV_CAP_PROP_FPS);
        CvSize size = cvSize((int)cvGetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_WIDTH) * 2,
            (int)cvGetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_HEIGHT));
    
        //创建输出视频文件
        CvVideoWriter* Save_result = NULL;
        Save_result = cvCreateVideoWriter(outfile, CV_FOURCC('X', 'V', 'I', 'D'), fps, size, 1);
        IplImage* dstImg = cvCreateImage(size, IPL_DEPTH_8U, 3);//创建要保存的图像
    
        //创建窗口
        cvNamedWindow("video", CV_WINDOW_AUTOSIZE);
    
        //创建一个随机数生成器
        RNG rng(0xFFFFFFFF);
        //定义字体
        CvFont font;
        cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX_SMALL, 1, 1, 0, 1, 8);
    
        //逐帧读取视频并进行处理   pFrame为取出原始帧
        while (pFrame = cvQueryFrame(pCapture)){
    
            nFrmNum++;
    
            //如果是第一帧,申请内存并进行初始化
            if (nFrmNum == 1){
                segMap = cvCreateImage(cvSize(pFrame->width, pFrame->height),
                    IPL_DEPTH_8U, 1); //保存处理后的信息
                segMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);//保存处理后的信息
                pAfter = cvCreateImage(cvSize(pFrame->width, pFrame->height),
                    IPL_DEPTH_8U, 1);//保存pFrame对应的灰度图像
                pAfterMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);//保存pFrame对应的灰度图像
    
                //转化成单通道图像再处理
                cvCvtColor(pFrame, pAfter, CV_BGR2GRAY);
                cvConvert(pAfter, pAfterMat);
                //
                Initialize(pAfterMat, rng);//以一个随机数生成器初始化灰度图像
            }
            else {
                if (nFrmNum%30==0)//此处为每30帧读取一次
                {
                    cvCvtColor(pFrame, pAfter, CV_BGR2GRAY);//RGB空间转换为RAY空间
                    cvConvert(pAfter, pAfterMat);//用于图像和矩阵之间的相互转换
                    update(pAfterMat, segMat, rng, nFrmNum);//更新背景
                    cvConvert(segMat, segMap);//用于图像和矩阵之间的相互转换
    
                    //载入原图像到目标图像
                    cvSetImageROI(dstImg, cvRect(0, 0, pFrame->width, pFrame->height));
                    cvCopy(pFrame, dstImg);
                    cvResetImageROI(dstImg);
                    //将segMap转换成三通道图像存在pFrame中
                    cvCvtColor(segMap, pFrame, CV_GRAY2BGR);
                    //载入检测后的图像到目标图像
                    cvSetImageROI(dstImg, cvRect(pFrame->width, 0, pFrame->width * 2, pFrame->height));
                    cvCopy(pFrame, dstImg);
                    cvResetImageROI(dstImg);
                    //显示提示文字
                    cvPutText(dstImg, "Input Video", cvPoint(0, pFrame->height - 5), &font, CV_RGB(255, 0, 0));
                    cvPutText(dstImg, "Vibe Segmentation", cvPoint(pFrame->width, pFrame->height - 5), &font, CV_RGB(255, 0, 0));
    
                    //保存视频和输出
                    cvWriteFrame(Save_result, dstImg);
    
                    /*输出图片
                    if(nFrmNum<11)
                    sprintf(filename,"E:\\Result\\Vibe\\AVSS_PV_Easy_Divx_Xvid\\000%d_Vibe.jpg",nFrmNum-1);
                    else if(nFrmNum<101)
                    sprintf(filename,"E:\\Result\\Vibe\\AVSS_PV_Easy_Divx_Xvid\\00%d_Vibe.jpg",nFrmNum-1);
                    else if(nFrmNum<1001)
                    sprintf(filename,"E:\\Result\\Vibe\\AVSS_PV_Easy_Divx_Xvid\\0%d_Vibe.jpg",nFrmNum-1);
                    else if(nFrmNum<10001)
                    sprintf(filename,"E:\\Result\\Vibe\\AVSS_PV_Easy_Divx_Xvid\\%d_Vibe.jpg",nFrmNum-1);
                    cvSaveImage(filename,dstImg);
                    */
    
                    cvShowImage("video", dstImg);
    
                    if (cvWaitKey(5) >= 0) break;
                }
    
            }
        }
        cvReleaseImage(&pFrame); cvReleaseMat(&pFrameMat);
        cvReleaseImage(&pAfter); cvReleaseMat(&pAfterMat);
        cvReleaseImage(&segMap); cvReleaseMat(&segMat);
        cvReleaseVideoWriter(&Save_result);
        cvReleaseImage(&dstImg);
        cvDestroyWindow("video");
        return 0;
    }
    

    类文件hanshu.h

    #include "stdafx.h"
    #include <opencv2/opencv.hpp>
    #include "highgui.h"
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    
    #define defaultNbSamples 20     //每个像素点的样本个数
    #define defaultReqMatches 2     //#min指数
    #define defaultRadius 20        //Sqthere半径
    #define defaultSubsamplingFactor 16 //子采样概率
    #define background 0        //背景像素
    #define foreground 255      //前景像素
    
    void Initialize(CvMat* pFrameMat,RNG rng);//初始化
    void update(CvMat* pFrameMat,CvMat* segMat,RNG rng,int nFrmNum);//更新

    类文件hanshu.cpp

    #include "stdafx.h"
    #include "hanshu.h"
    #include <opencv2/opencv.hpp>
    #include "highgui.h"
    #include <math.h>
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    
    static int c_xoff[9] = {-1,  0,  1, -1, 1, -1, 0, 1, 0};//x的邻居点
    static int c_yoff[9] = {-1,  0,  1, -1, 1, -1, 0, 1, 0};//y的邻居点
    
    float samples[1024][1024][defaultNbSamples+1];//保存每个像素点的样本值
    
    
    //初始化
    void Initialize(CvMat* pFrameMat,RNG rng){
    
        //记录随机生成的 行(r) 和 列(c)
        int rand,r,c;
    
        //对每个像素样本进行初始化
        for(int y=0;y<pFrameMat->rows;y++){//Height
            for(int x=0;x<pFrameMat->cols;x++){//Width
                for(int k=0;k<defaultNbSamples;k++){
                    //随机获取像素样本值
                    rand=rng.uniform( 0, 9 );//b如果是真值,返回a,否则返回(int)(next() % (b - a) + a);
                    r=y+c_yoff[rand]; if(r<0) r=0; if(r>=pFrameMat->rows) r=pFrameMat->rows-1;  //行
                    c=x+c_xoff[rand]; if(c<0) c=0; if(c>=pFrameMat->cols) c=pFrameMat->cols-1;  //列
                    //存储像素样本值
                    samples[y][x][k]=CV_MAT_ELEM(*pFrameMat,float,r,c);
                }
                samples[y][x][defaultNbSamples]=0;
            }
        }
    }
    
    
    //更新函数
    void update(CvMat* pFrameMat,CvMat* segMat,RNG rng,int nFrmNum){
    
        for(int y=0;y<pFrameMat->rows;y++){ //Height
            for(int x=0;x<pFrameMat->cols;x++){ //Width
    
                //用于判断一个点是否是背景点,index记录已比较的样本个数,count表示匹配的样本个数
                int count=0,index=0;float dist=0;
                //
                while((count<defaultReqMatches) && (index<defaultNbSamples)){
                    dist=CV_MAT_ELEM(*pFrameMat,float,y,x)-samples[y][x][index];
                    if(dist<0) dist=-dist;
                    if(dist<defaultRadius) count++;
                    index++;
                }
                if(count>=defaultReqMatches){
    
                    //判断为背景像素,只有背景点才能被用来传播和更新存储样本值
                    samples[y][x][defaultNbSamples]=0;
    
                    *((float *)CV_MAT_ELEM_PTR(*segMat,y,x))=background;
    
                    int rand=rng.uniform(0,defaultSubsamplingFactor);
                    if(rand==0){
                        rand=rng.uniform(0,defaultNbSamples);
                        samples[y][x][rand]=CV_MAT_ELEM(*pFrameMat,float,y,x);
                    }
                    rand=rng.uniform(0,defaultSubsamplingFactor);
                    if(rand==0){
                        int xN,yN;
                        rand=rng.uniform(0,9);yN=y+c_yoff[rand];if(yN<0) yN=0; if(yN>=pFrameMat->rows) yN=pFrameMat->rows-1;
                        rand=rng.uniform(0,9);xN=x+c_xoff[rand];if(xN<0) xN=0; if(xN>=pFrameMat->cols) xN=pFrameMat->cols-1;
                        rand=rng.uniform(0,defaultNbSamples);
                        samples[yN][xN][rand]=CV_MAT_ELEM(*pFrameMat,float,y,x);
                    } 
                }
                else {
                    //判断为前景像素
                    *((float *)CV_MAT_ELEM_PTR(*segMat,y,x))=foreground;
    
                    samples[y][x][defaultNbSamples]++;
                    if(samples[y][x][defaultNbSamples]>50){
                        int rand=rng.uniform(0,defaultNbSamples);
                        if(rand==0){
                            rand=rng.uniform(0,defaultNbSamples);
                            samples[y][x][rand]=CV_MAT_ELEM(*pFrameMat,float,y,x);
                        }
                    }
                }
    
            }
        }
    
    }
    展开全文
  • CAN总线之CAN的报文格式--错误帧

    千次阅读 2018-10-15 09:41:29
    错误帧:任何单元检测到一总线错误就发出错误帧。 过载:过载用以在先行的和后续的数据(或远程)之间提供一附加的延时。 同时间空间用来间隔数据/远程与其他。 1.数据 一个完整的数据有7...
  • 错误代码:-1609629695 于是亲测该PR模板:PR模板 卖房售房租房酒店促销等产品幻灯片展示PR视频模板 找到了解决办法。 如果你也遇到同样问题,可以尝试下面的方法哦。 1、点击菜单“文件”,选则“项目设置”,点击...
  • 一个课程作业,主要是写程序分析以太网格式,用的是CRC32校验。 为了便于学习所以注释部分写得很全面。
  • HTTP状态代码(各种错误代码集合) 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新) 101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新) 200 OK ...
  • 代码 import cv2 # 安装见 https://blog.csdn.net/qq_43657442/article/details/109276236 from skimage import io # 若安装不上,或很慢,见https://blog.csdn.net/qq_43657442/article/details/109526813 import ...
  • HTTP状态代码(各种错误代码集合)

    万次阅读 2013-12-30 12:00:27
    HTTP状态代码(各种错误代码集合)  100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新) 101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)...
  • CAN总线的远程、错误帧的作用!

    万次阅读 2015-12-22 15:49:24
    CAN总线的远程、错误帧的作用!
  • Windows 系统错误代码

    万次阅读 2016-06-15 14:49:09
    558-如返回一个未在标准 FsRtl 筛选程序中定义的 MM 错误,该错误将会转换为已在筛选程序中定义的下述错误之一。在这种情况下,信息会丢失;但筛选器能正确地处理该异常情形。 559-在释放操作期间遇到格式不正确的...
  • 最近在使用FFMPEG截取视频关键时,出现了错误代码 -24 反复调试未果, 之后查看源代码发现:  原因:打开视频文件后未及时关闭超出了ubnatu系统限制而出错;  解决方法: 在截取完关键后使用avformat_close...
  • 行为识别C3D代码(pytorch)实现过程及常见错误

    千次阅读 多人点赞 2021-01-31 11:46:31
    行为识别C3D代码(pytorch)实现过程及常见错误 1.C3D网络代码 C3D(pytorch)实现代码链接: C3D代码 2.C3D代码复现过程 (1)环境要求 pytorch版本: (1)数据集的制作 首先将UCF-101的数据集结构存储为以下形式: ...
  • 视频流中的 I P B .

    千次阅读 2016-08-28 08:23:40
    视频流中的I,P,B介绍 首先我们需要理解,每一个都代表着一个静止的图像。在我们实际传输视频流中,我们会想尽办法,通过各种算法来减少数据的容量,这里最为常见的为IPB(Intra coded frames, Predicted ...
  • 使用AVFoundation 获取一组视频的 - (IBAction)goCap:(id)sender {    NSBundle *mainBundle = [NSBundle mainBundle];  NSString *urlAsString = [mainBundle pathForResource:@"asdf"  
  • python实现视频关键提取(基于间差分)

    万次阅读 多人点赞 2018-12-05 20:35:17
    python实现视频关键提取(基于间差分) 在很多场景下,我们不想或者不能处理视频的每一图片,这时我们希望能够从视频中提取出一些重要的进行处理,这个过程我们称为视频关键提取。 关键提取算法多种多样...
  • 今天,有朋友在问为什么我在调试的时候会出现"没有可用于当前位置的源代码"的错误呢? MSDN上的说法: 没有可用于当前位置的源代码,项目不包含您试图查看代码的源代码。原因通常是双击了“调用堆栈”窗口或...
  • 同步

    千次阅读 2019-05-07 11:49:29
    同步技术是早期RTS游戏常用的一种同步技术,本篇文章要给大家介绍的是RTX游戏中同步实现,同步是一种前后端数据同步的方式,一般应用于对实时性要求很高的网络游戏,想要了解更多同步的知识,继续往下看。
  • 经常使用Windows系统的应该少不了蓝屏的时候...一个死机(BSOD)的蓝屏,技术上称为一个STOP错误,若在Windows遭受了严重的错误,被迫“停”的问题。 在任何Windows 操作系统中都会出现BSOD错误,包括Windows 10,Wind...
  • Symbian操作系统的所有错误代码

    万次阅读 2010-04-14 09:35:00
    通用错误了KErrNone0 KErrNotFound-1无法找到指定的对象KErrGeneral-2一般(未指明)错误KErrCancel-3该操作已被取消KErrNoMemory-4没有足够的内存KErrNotSupp
  • 程序仿真正常跑没问题,串口一发数程序就会死在串口错误中断回调函数中 void HAL_UART_ErrorCallback(UART_HandleTypeDef *UartHandle) { while(1) { } } 单步调试发现是在 void HAL_UART_IRQHandler(UART_...
  • 两个月来,在理清视频编码结构后,终于渐渐理解并敢于修改VVC的代码。并准备在博客这个平台上记录自己的学习,希望可以与更优秀的人交流讨论。 第一次写微博,准备多说些。我是在2017年4月了解的视频编码,当时的计...
  • 直接上代码 /************************************************************************** * @brief 串口错误回调函数 * @retval ***********************************************************.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,390
精华内容 36,156
关键字:

帧代码错误