C ++ OpenCV imread с размером CV_8UC4 в два раза - PullRequest
0 голосов
/ 26 апреля 2019

Мы пытаемся прочитать изображение PNG размером 400x400, используя OpenCV 4.1.0, вызывая:

*image = imread( filepath, CV_8UC4 );

Когда я печатаю и столбцы, и строки мата, вызывающего:

printf("col: %d , rows: %d \n", image->cols, image->rows);

показывает

col: 200, rows: 200

Но звонит file на изображении, которое оно показывает:

PNG image data, 400 x 400, 8-bit/color RGBA, non-interlaced.

Когда я пытаюсь наложить второй снимок, он показывает, что размер изображения действительно неправильный.

Как я могу заставить чтение рисунка дать мат размером 400x400 Vec4b.

1 Ответ

1 голос
/ 26 апреля 2019

Второй аргумент imread - это аргумент flags, который ожидает некоторые флаги загрузки цвета, но не тип пикселя, как вы предоставляете. Прочитайте возможные flags значения и их значения здесь .

Вместо этого загрузите изображение как есть, и если оно не содержит 4 канала или тип не того, который вам нужен, рекомбинируйте каналы (с OpenCV split(), merge(), mixChannels() и т. Д.) И преобразуйте его в необходимый тип пикселя с cv::Mat::convertTo(). Или используйте легальные imread флаги, если любой из них соответствует вашим потребностям.

...