Здравствуйте, сейчас я пытаюсь использовать поток, чтобы прочитать некоторую информацию о 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]