Необработанное исключение в конце потока - PullRequest
1 голос
/ 06 июня 2019

Здравствуйте, сейчас я пытаюсь использовать поток, чтобы прочитать некоторую информацию о 2 изображениях с помощью OpenCV 2.3.1, хотя я могу без проблем получить размеры 2 изображений, возникает ошибка, когда я достигаю концапоток.

Необработанное исключение в 0x00348A56 в OpenCvDemo.exe: недопустимый параметр был передан функции, которая считает недопустимые параметры фатальными.

Поскольку я могу прочитать размериз изображений просто отлично, я знаю, что они не пусты или что-нибудь.В другом тесте я отсоединил поток и перевел его в режим сна на 5 секунд, основная функция выполнялась нормально и отобразила изображение, но как только поток проснулся и достиг конца, он завершил работу приложения и отобразил ту же ошибку, что и выше.

К сожалению, мне нужно использовать OpenCV 2.3.1, так как это всего лишь тест для более крупного приложения.

Как я могу решить эту проблему или, по крайней мере, в чем ее причина?

#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <thread>
#include <opencv2/opencv.hpp>

void Loop(cv::Mat &image1, cv::Mat &image2) {

    std::vector<uchar> buff1;
    std::vector<uchar> buff2;

    cv::imencode(".png", image1, buff1);
    cv::imencode(".png", image2, buff2);

    int imageSize1 = buff1.size();
    int imageSize2 = buff2.size();

    std::cout << "Size " << imageSize1 << "\n";
    std::cout << "Size " << imageSize2 << "\n";
}

int main()
{
    cv::Mat image1 = cv::imread("C:\\Users\\Cesar\\Pictures\\happyface.png", 1);
    cv::Mat image2 = cv::imread("C:\\Users\\Cesar\\Pictures\\happyface.png", 1);

    std::thread mythread(Loop, std::ref(image1), std::ref(image2));
    mythread.join();

    cv::imshow("name", image1);
    cv::waitKey(0);

    return 0;
}

стек вызовов

OpenCvDemo.exe!_invoke_watson(const wchar_t * expression, const wchar_t * function_name, const wchar_t * file_name, unsigned int line_number, unsigned int reserved) Line 224   C++
OpenCvDemo.exe!_invalid_parameter(const wchar_t * expression, const wchar_t * function_name, const wchar_t * file_name, unsigned int line_number, unsigned int reserved) Line 113   C++
[External Code] 
OpenCvDemo.exe!Loop(cv::Mat & image1, cv::Mat & image2) Line 23 C++
[External Code] 
OpenCvDemo.exe!invoke_thread_procedure(unsigned int(__stdcall*)(void *) procedure, void * const context) Line 92    C++
OpenCvDemo.exe!thread_start<unsigned int (__stdcall*)(void *)>(void * const parameter) Line 115 C++
[External Code] 
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]  

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...