Opencv c++ 读取摄像头代码(测试环境openv4.6)

cv::VideoCapture的参数通常是从0开始递增的整数,用来表示不同的摄像头设备。参数0表示第一个摄像头,参数1表示第二个摄像头,依此类推。摄像头的索引由系统分配,通常是按照设备连接顺序分配的。

#include <opencv2/opencv.hpp>

int main() {
    // 创建一个VideoCapture对象
    cv::VideoCapture cap(0); // 参数0表示打开默认摄像头

    // 检查摄像头是否成功打开
    if (!cap.isOpened()) {
        std::cerr << "Error: Could not open camera" << std::endl;
        return -1;
    }

    // 创建一个窗口用于显示视频
    cv::namedWindow("Camera", cv::WINDOW_AUTOSIZE);

    while (true) {
        cv::Mat frame;
        
        // 读取当前帧
        cap >> frame;

        // 检查帧是否为空
        if (frame.empty()) {
            std::cerr << "Error: Could not read frame" << std::endl;
            break;
        }

        // 显示当前帧
        cv::imshow("Camera", frame);

        // 按下ESC键退出
        if (cv::waitKey(30) == 27) {
            break;
        }
    }

    // 释放摄像头
    cap.release();

    // 销毁窗口
    cv::destroyAllWindows();

    return 0;
}

在摄像头窗口上显示fps

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // 创建一个VideoCapture对象
    cv::VideoCapture cap(0); // 参数0表示打开默认摄像头

    // 检查摄像头是否成功打开
    if (!cap.isOpened()) {
        std::cerr << "Error: Could not open camera" << std::endl;
        return -1;
    }

    // 创建一个窗口用于显示视频
    cv::namedWindow("Camera", cv::WINDOW_AUTOSIZE);

    // 用于计算FPS的变量
    int frame_count = 0;
    double fps = 0.0;
    cv::TickMeter tick_meter;

    while (true) {
        cv::Mat frame;
        
        // 开始计时
        tick_meter.start();

        // 读取当前帧
        cap >> frame;

        // 检查帧是否为空
        if (frame.empty()) {
            std::cerr << "Error: Could not read frame" << std::endl;
            break;
        }

        // 停止计时
        tick_meter.stop();

        // 计算FPS
        frame_count++;
        if (frame_count >= 10) { // 每10帧计算一次FPS
            fps = frame_count / tick_meter.getTimeSec();
            tick_meter.reset();
            frame_count = 0;
        }

        // 在帧上显示FPS
        std::string fps_text = "FPS: " + std::to_string(fps);
        cv::putText(frame, fps_text, cv::Point(10, 30), cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(255, 0, 0), 2);

        // 显示当前帧
        cv::imshow("Camera", frame);

        // 按下ESC键退出
        if (cv::waitKey(30) == 27) {
            break;
        }
    }

    // 释放摄像头
    cap.release();

    // 销毁窗口
    cv::destroyAllWindows();

    return 0;
}

可以使用OpenCV通过尝试打开多个摄像头来检测电脑上有多少个可用的摄像头。下面是一个简单的C++代码示例,演示如何检测并列出所有可用的摄像头:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    int maxTested = 10; // 测试前10个索引,通常不需要测试更多
    int availableCameras = 0;

    std::cout << "Detecting available cameras...\n";

    for (int i = 0; i < maxTested; ++i) {
        cv::VideoCapture cap(i);
        if (cap.isOpened()) {
            std::cout << "Camera " << i << " is available.\n";
            availableCameras++;
            cap.release(); // 释放摄像头
        }
    }

    std::cout << "Total available cameras: " << availableCameras << std::endl;

    return 0;
}

另外

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

养牛大人

感谢您的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值