C++ 在从相机读取帧时,OpenCV[[mjpeg@0000000000 428480]覆盖了8]

C++ 在从相机读取帧时,OpenCV[[mjpeg@0000000000 428480]覆盖了8],c++,opencv,ffmpeg,C++,Opencv,Ffmpeg,我有一个非常恼人的OpenCV错误,我无法理解和处理。 我编写了一个应用程序,从ip摄像头中获取mjpg的流,并对其进行处理,但当我尝试从流中加载图像时,有时会出现问题 [mjpeg @ 0000000000428480] overread 8 错误,我不知道为什么。 即使我试图跳过这个问题,并尝试从流中加载下一帧,应用程序仍会继续运行 frameStatus = cameraHandler->read(mat); 这是建立连接的代码: void ImageProcessor::con

我有一个非常恼人的OpenCV错误,我无法理解和处理。 我编写了一个应用程序,从ip摄像头中获取mjpg的流,并对其进行处理,但当我尝试从流中加载图像时,有时会出现问题

[mjpeg @ 0000000000428480] overread 8
错误,我不知道为什么。 即使我试图跳过这个问题,并尝试从流中加载下一帧,应用程序仍会继续运行

frameStatus = cameraHandler->read(mat);
这是建立连接的代码:

void ImageProcessor::connectWithCamera(VideoCapture * cameraHandler) {
    if (cameraHandler != nullptr) {
        Logger::log("Closing existing camera stream.");
        cameraHandler->release();
        delete cameraHandler;
    }
    Logger::log("Camera configuration and connection establishing.");
    cameraHandler = new VideoCapture();
    cameraHandler->set(CV_CAP_PROP_FRAME_WIDTH, config.RESOLUTION_WIDTH);
    cameraHandler->set(CV_CAP_PROP_FRAME_HEIGHT, config.RESOLUTION_HEIGHT);
    cameraHandler->set(CV_CAP_PROP_FPS, config.CAMERA_FPS);
    cameraHandler->set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));
    while (!cameraHandler->open(config.LINK)) {
        Logger::log("Cannot connect to camera! Trying again.");
    }
}
这是用于捕获图像的代码:

void ImageProcessor::start() {

    VideoCapture * cameraHandler = new VideoCapture();
    this->connectWithCamera(cameraHandler);
    this->connectWithServer(this->serverConnection);

    Logger::log("Id sending.");
    serverConnection->send(config.TOKEN + "\n");
    Logger::log("Computations starting.");

    Mat mat;
    Result * result = nullptr;
    int delta = 1000 / cameraHandler->get(CV_CAP_PROP_FPS);
    char frameErrorCounter = 0;
    bool frameStatus;

    while (true) {
        frameStatus = false;
        cv::waitKey(delta);

        try {
            frameStatus = cameraHandler->read(mat);
        } catch (std::exception& e) {
            std::string message = e.what();
            Logger::log("Critical camera error! : " + message);
        }

        if (!frameStatus) {
            Logger::log("Cannot read a frame from source. ");
            ++frameErrorCounter;
            if (!cameraHandler->isOpened() || frameErrorCounter >= this->GET_FRAME_ERROR_COUNTER) {
                Logger::log("Probably camera is disconnected. Trying to establish connection again.");
                frameErrorCounter = 0;
                this->connectWithCamera(cameraHandler);
                Logger::log("Computations starting.");
            }
            continue;
        }

        result = processImage(mat);

        std::string stringResult;
        if (result == nullptr) {
            stringResult = this->NO_RESULT;
            delete result;
            result = nullptr;
        } else {
            stringResult = result->toJson();
        }

        if (!serverConnection->send(stringResult)) {
            Logger::log("Server connection lost, trying to establish it again.");
            serverConnection->close();
            while (!serverConnection->isOpen()) {
                this->connectWithServer(serverConnection);
            }
        }

        mat.release();
    }

}

提前谢谢

我也有同样的问题。你找到解决办法了吗?事实上。。。不,我已经为这段代码制作了java端口,它工作得很好。