- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
切换异常模式
方法在不成功时抛出异常而不是返回错误代码
在 OpenCV 中,cv::VideoCapture::setExceptionMode 函数用于设置视频捕获对象在操作过程中遇到错误时是否抛出异常。该函数允许你控制在视频捕获过程中遇到错误时的行为。
函数原型
void cv::VideoCapture::setExceptionMode
(
bool enable
)
参数
- 参数enable (bool):
- 描述:一个布尔值,用于指定是否启用异常抛出模式。
- 如果 enable 为 true,则当 VideoCapture 对象在执行任何操作时遇到错误,将会抛出异常。
- 如果 enable 为 false,则不会抛出异常,而是采用其他错误处理机制(例如返回错误码)。
示例代码
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 创建一个 VideoCapture 对象
cv::VideoCapture cap;
// 定义摄像头设备索引
int cameraIndex = 0; // 第一个摄像头设备
// 设置异常处理模式为抛出异常
cap.setExceptionMode(true);
// 尝试打开摄像头设备
if (!cap.open(cameraIndex, cv::CAP_ANY)) {
std::cout << "Failed to open camera at index: " << cameraIndex << std::endl;
return -1;
}
// 检查是否成功打开了摄像头设备
if (!cap.isOpened()) {
std::cout << "Error opening camera at index: " << cameraIndex << std::endl;
return -1;
}
// 设置帧宽度和高度
cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
// 循环读取并显示视频帧
while (true) {
// 创建一个 Mat 对象来存储视频帧
cv::Mat frame;
// 从视频流中读取下一帧
if (!cap.read(frame)) {
std::cout << "No frame grabbed." << std::endl;
break;
}
// 检查是否成功读取到了帧
if (frame.empty()) {
std::cout << "Frame is empty." << std::endl;
break;
}
// 显示视频帧
cv::imshow("Camera Stream", frame);
// 按 'q' 键退出循环
if (cv::waitKey(1) == 'q') {
break;
}
}
// 释放资源
cap.release();
cv::destroyAllWindows();
return 0;
}