Я хочу открыть два прозрачных изображения внутри opencv на языке C++
У меня есть 2 прозрачных изображения, которые я хочу, чтобы они были открыты в одном окне в opencv. Приведенный ниже код открывает два изображения, но без альфа-канала, потому что он использует (CV_8UC3) и те изображения, которые прозрачны, мы должны использовать (CV_8UC4), чтобы показать прозрачность, но когда я изменяю код на (CV_8UC4), программа выдает мне ошибку.
Я поставлю # на строку (CV_8UC4);
Я поставлю * на линию ошибки;
//код превратился в 3 части из-за * и #.
корпорация Майкрософт Visual Studio в диалоговом окне ошибки показывает эту ошибку : необработанное исключение в 0x00007FFA48633FB8 в openCV.exe: Майкрософт исключений c++: резюме::исключение на месте 0x0000007563FDEA00 памяти.
и окно консольного приложения показывает следующее : OpenCV Error: Assertion failed (channels() == CV_MAT_CN(dtype)) in cv::Mat::copyTo, file C:\build\master_winpack-build-win64-vc14\opencv\modules\core\src\copy.cpp, строка 272
Подходит ли этот код для того, что я хочу сделать?
Этот код открывает несколько изображений, но я использую его для двух.
код есть:
Что я уже пробовал:
void ShowManyImages(string title, int nArgs, ...) { int size; int i; int m, n; int x, y; // w - Maximum number of images in a row // h - Maximum number of images in a column int w, h; // scale - How much we have to resize the image float scale; int max; // If the number of arguments is lesser than 0 or greater than 12 // return without displaying if (nArgs <= 0) { printf("Number of arguments too small....\n"); return; } else if (nArgs > 14) { printf("Number of arguments too large, can only handle maximally 12 images at a time ...\n"); return; } // Determine the size of the image, // and the number of rows/cols // from number of arguments else if (nArgs == 1) { w = h = 1; size = 300; } else if (nArgs == 2) { w = 2; h = 1; size = 1000; } else if (nArgs == 3 || nArgs == 4) { w = 2; h = 2; size = 300; } else if (nArgs == 5 || nArgs == 6) { w = 3; h = 2; size = 200; } else if (nArgs == 7 || nArgs == 8) { w = 4; h = 2; size = 200; } else { w = 4; h = 3; size = 150; } // Create a new 3 channel image # Mat DispImage = Mat::zeros(Size(100 + size*w, 60 + size*h), CV_8UC4); // Used to get the arguments passed va_list args; va_start(args, nArgs); // Loop for nArgs number of arguments for (i = 0, m = 20, n = 20; i < nArgs; i++, m += (0)) { // Get the Pointer to the IplImage Mat img = va_arg(args, Mat); // Check whether it is NULL or not // If it is NULL, release the image, and return if (img.empty()) { printf("Invalid arguments"); return; } // Find the width and height of the image x = img.cols; y = img.rows; // Find whether height or width is greater in order to resize the image max = (x > y) ? x : y; // Find the scaling factor to resize the image scale = (float)((float)max / size); // Used to Align the images if (i % w == 0 && m != 20) { m = 20; n += 20 + size; } // Set the image ROI to display the current image // Resize the input image and copy the it to the Single Big Image Rect ROI(m, n, (int)(x / scale), (int)(y / scale)); Mat temp; resize(img, temp, Size(ROI.width, ROI.height)); * temp.copyTo(DispImage(ROI)); } // Create a new window, and show the Single Big Image namedWindow(title, 1); imshow(title, DispImage); waitKey(); // End the number of arguments va_end(args); } int main(int argc, char** argv) { Mat img1 = imread("c:\\1.png"); Mat img2 = imread("c:\\2.png"); ShowManyImages("Image", 2, img1, img2); return 0; }
Patrice T
- это дает мне ошибку.
И вы нашли сообщение об ошибке ?
Member 13565065
Я уставился на строку ошибки, но не могу найти причину ошибки.
Patrice T
ЧТО ТАКОЕ СООБЩЕНИЕ ОБ ОШИБКЕ ?
Member 13565065
корпорация Майкрософт Visual Studio в диалоговом окне ошибки показывает эту ошибку::::необработанное исключение в 0x00007FFA48633FB8 в openCV.exe: Майкрософт исключений c++: резюме::exception в памяти расположение 0x0000007563FDEA00. а в консольном приложении окно показывает это::::в формате OpenCV ошибка: ошибка утверждения (каналы() == CV_MAT_CN(dtype)) в резюме::мат::метод CopyTo, файл C:\build\master_winpack-build-win64-vc14\opencv\modules\core\src\copy.cpp, линия 272
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
Member 13565065
спасибо, что я обновил свой вопрос.
Но есть ли у вас какие - нибудь идеи по поводу этой проблемы?
Patrice T
Нет, извините
Member 13565065
в любом случае спасибо