精易论坛

标题: 帮忙看看这段代码 [打印本页]

作者: 525855281    时间: 2024-2-28 17:09
标题: 帮忙看看这段代码
[C++] 纯文本查看 复制代码
while (true) {

        // 从摄像头捕获一帧图像

        cv::Mat frame;

        cap >> frame;

while (true) {
// 从摄像头捕获一帧图像
cv::Mat frame;
cap >> frame;

if (frame.empty()) {
std::cerr << "无法捕获图像" << std::endl;
break;
}

// 在窗口中显示图像
cv::imshow("摄像头预览", frame);

// 等待用户按键,如果是'q'则退出循环
char c = (char)cv::waitKey(25);
if (c == 'q' || c == 27) {
break



        if (frame.empty()) {

            std::cerr << "无法捕获图像" << std::endl;

            break;

        }



        // 在窗口中显示图像

        cv::imshow("摄像头预览", frame);



        // 等待用户按键,如果是'q'则退出循环

        char c = (char)cv::waitKey(25);

        if (c == 'q' || c == 27) {

            break

请大佬帮我翻译成火山代码

作者: 1752328925    时间: 2024-2-28 17:09
这代码是OpenCV库来从摄像头捕获图像,按下q退出循环 但是这代码有问题
第一个问题 `cv::Mat`对象是线程不安全的,如果你在多线程环境中使用它。咳咳
第二:`cv::waitKey(25)`的参数应该是毫秒数,你可能需要注意一下这个值
修正一下代码哦
[C++] 纯文本查看 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    cv::VideoCapture cap(0); // 打开默认摄像头
    if (!cap.isOpened()) {
        std::cerr << "无法打开摄像头" << std::endl;
        return -1;
    }

    while (true) {
        cv::Mat frame;
        cap >> frame;
        if (frame.empty()) {
            std::cerr << "无法捕获图像" << std::endl;
            break;
        }

        cv::imshow("摄像头预览", frame);
        char c = cv::waitKey(1); // 使用1毫秒的延迟
        if (c == 'q' || c == 27) { // 如果用户按下'q'或Esc键,退出循环
            break;
        }
    }
    return 0;
}






欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4