关于OpenCV程序运行结束时的异常中断

2024-03-01 05:18

本文主要是介绍关于OpenCV程序运行结束时的异常中断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019年4月11日:由于本人最近需要用MFC开发,所以看了孙鑫的书(VC++深入详解),第92页有一句话可能与这个异常有关,所以要记录一下!原文如下:

C++窗口类对象和窗口并不是一回事,它们之间唯一的关系是C++窗口类对象内部定义了一个窗口的句柄变量,保存了与这个C++窗口类对象相关的那个窗口的句柄。窗口销毁时,与之对应的C++窗口类对象销毁与否,要看其生命周期是否结束。但C++窗口类对象销毁时,与之相关的窗口也将销毁。

由于水平有限,并不熟悉C++,只能做出如下猜测:当如我们手动关闭窗口相当于窗口的句柄被销毁了(句柄的作用或者说生命结束了),但是这个窗口的对象的生命周期并没有结束。所以当程序再次访问对象时,找不到对应的窗口句柄,就出现了异常。

本次就记录这些,如果以后有新的发现再更新!

哎,能力有限,这个问题一直放在心上,强迫症表示要被逼死了。只能走一步看一步了。。。


补充:本人最近刚买了一台全新的电脑。重新配置OpenCV3,使用的是VS2017,同样遇到了以下情况,使用的解决方法依旧是在程序结束时关闭所有的窗口,即使用destroyAllWindows()解决了问题。可能此方法不适用所有人,但是试一试总是好的,由于最近几乎不使用OpenCV,具体原因可能要以后找出来。如果有知道的朋友欢迎回复哦!


在使用OpenCV3和vs 2015过程中:

当调用namedWindow()或者imshow()函数之后,不进行手动释放,在程序运行结束时,会出现下面这些异常中断:

1.以下为waitKey(1000)与waitKey(0)之后的结果:

0x00007FFAD7990DC0 (ntdll.dll)处(位于 test.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000010 时发生访问冲突。

程序“[4180] test.exe”已退出,返回值为 0 (0x0)。

 

2.当手动关闭控制台后的结果:

线程 0x1874 已退出,返回值为 1 (0x1)。

线程 0x3058 已退出,返回值为 0 (0x0)。

线程 0x2e44 已退出,返回值为 1 (0x1)。

线程 0x17c4 已退出,返回值为 1 (0x1)。

线程 0x2414 已退出,返回值为 1 (0x1)。

线程 0x734 已退出,返回值为 0 (0x0)。

线程 0x2834 已退出,返回值为 -1073741510 (0xc000013a)。

线程 0x31bc 已退出,返回值为 -1073741510 (0xc000013a)。

线程 0x1190 已退出,返回值为 -1073741510 (0xc000013a)。

线程 0x2c38 已退出,返回值为 -1073741510 (0xc000013a)。

线程 0x3cec 已退出,返回值为 -1073741510 (0xc000013a)。

线程 0x3eb4 已退出,返回值为 -1073741510 (0xc000013a)。

线程 0x3c90 已退出,返回值为 -1073741510 (0xc000013a)。

线程 0x3300 已退出,返回值为 -1073741510 (0xc000013a)。

程序“[5168] test.exe”已退出,返回值为 -1073741510 (0xc000013a)。

 

以上两种情况程序都不是正常结束!

3.当在waitKey(1000)之后加入destroyAllWindows()函数后:

线程 0x3c3c 已退出,返回值为 0 (0x0)。

线程 0xf84 已退出,返回值为 0 (0x0)。

线程 0x2754 已退出,返回值为 0 (0x0)。

线程 0x1c68 已退出,返回值为 0 (0x0)。

线程 0xadc 已退出,返回值为 0 (0x0)。

线程 0x11e8 已退出,返回值为 0 (0x0)。

线程 0x2ce4 已退出,返回值为 0 (0x0)。

程序“[9244] test.exe”已退出,返回值为 0 (0x0)。

程序正常退出!

 

4.值得注意的是,不管在那种情况下,直接关闭控制台来退出程序,程序很可能会返回一个不是0的值。

这篇关于关于OpenCV程序运行结束时的异常中断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761323

相关文章

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性