Обработка исключения при сравнении двух матриц(фотографий) в 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";
→ Ссылка