OpenCV cvtColor выдает исключение: неверное количество каналов во входном изображении - PullRequest
1 голос
/ 09 апреля 2020

У меня есть cv::Mat img, который я пытаюсь преобразовать в CV_8UC3, используя это:

cv::cvtColor(img, dst, cv::COLOR_GRAY2RGB);

Выдает эту ошибку:

 Exception: OpenCV(4.2.0) external/opencv/modules/imgproc/src/color.simd_helpers.hpp:92: error: 
(-2:Unspecified error) in function 'cv::impl::(anonymous namespace)::CvtHelper<cv::impl::(anonymous namespace)::Set<1, -1, -1>, 
cv::impl::(anonymous namespace)::Set<3, 4, -1>, cv::impl::(anonymous namespace)::Set<0, 2, 5>, cv::impl::(anonymous namespace)::NONE>::CvtHelper(cv::InputArray, cv::OutputArray, int) 
[VScn = cv::impl::(anonymous namespace)::Set<1, -1, -1>, VDcn = cv::impl::(anonymous namespace)::Set<3, 4, -1>, VDepth = cv::impl::(anonymous namespace)::Set<0, 2, 5>, 
sizePolicy = cv::impl::(anonymous namespace)::NONE]'
    Invalid number of channels in input image:
    'VScn::contains(scn)' where 'scn' is 3

Любые идеи, что это может означать?

1 Ответ

2 голосов
/ 09 апреля 2020

Ошибка означает, что изображение уже "цветное" (то есть оно уже имеет 3 канала). OpenCV не может преобразовать его из GRAY в RGB, потому что серое изображение имеет только один цветной канал.

CV_8UC3 означает, что у вас есть 3 цветовых канала с 8-битной глубиной. Если вы действительно хотите убедиться, что у вас есть CV_8UC3, вы можете попробовать что-то подобное при создании своего изображения:

// create a new 320x240 image
Mat img(Size(320,240),CV_8UC3);

Если вы поделитесь, как вы создаете img, я могу подтвердить, что это случай, но во всяком случае это то, что означает ошибку.

Обновление

Этот ответ дает хорошее руководство по отладке ваших Mat объектов. Согласно коду ошибки, у вас уже есть 3-канальное изображение, так что позаботится о части C3. Часть 8U означает, что это все 8-битные беззнаковые двоичные данные в масштабе от 0 до 255. Как только вы узнаете выходные данные скрипта, который я упомянул выше, вы можете масштабировать или преобразовать его соответствующим образом.

В этом ответе подробно описано, как преобразовать данные в разную глубину цвета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...