Обработка исключения при сравнении двух матриц(фотографий) в C++ OpenCv + возможная ошибка в коде
Выдаёт исключение. не пойму, что можно сделать, и как его поймать заранее.
"Возникло необработанное исключение по адресу 0x00007FFB1064A799 в CV.exe: исключение Microsoft C++: cv::Exception по адресу памяти 0x000000627CBAF280."
"OpenCV(4.3.0) Error: Assertion failed (cn == 1) in cv::countNonZero, file C:\build\master_winpack-build-win64-vc15\openv2"
Mat image = imread("D:\\Arry\\chesir.jpg", 1);
Mat imagesrav = imread("D:\\Arry\\chesir.jpg", 1);
if (image.empty())
std::cout << "Image not";
Mat result;
absdiff(image, imagesrav, result);
if (countNonZero(result) == 0) // выдаёт исключение тут
std::cout << "status image: Yes";
else
std::cout << "status image: No";
Ответы (1 шт):
Автор решения: YanShun
→ Ссылка
Нужно было привести все изображения к одной цветовой палитре.
К правильному коду нужно было добавить перед вычитанием матриц (absdiff) cvtcolor(изображение, цвет).
Правильный код:
Mat image = imread("D:\\Arry\\chesir.jpg", 1);
Mat imagesrav = imread("D:\\Arry\\chesir.jpg", 1);
if (image.empty())
std::cout << "Image not";
Mat result;
absdiff(image, imagesrav, result);
cvtColor(image, image, COLOR_RGB2GRAY, 1); // добавить это
cvtColor(imagesrav, imagesrav, COLOR_RGB2GRAY, 1);
cvtColor(result, result, COLOR_RGB2GRAY, 1);
if (countNonZero(result) == 0)
std::cout << "status image: Yes";
else
std::cout << "status image: No";