Конвертировать одноканальное изображение в 3-канальное изображение C ++ / OpenCV - PullRequest
10 голосов
/ 01 сентября 2010

Я использую openCV C ++

Мне нужно конвертировать одноканальное изображение в 3-канальное изображение.Так что я могу использовать это: cvCvtColor(result,gray,CV_BGR2GRAY);

Я не могу этого сделать, потому что в результате img изображение одного канала.Есть идеи?

Ответы [ 5 ]

15 голосов
/ 01 сентября 2010

Вы должны использовать CV_GRAY2BGR вместо CV_BGR2GRAY.

7 голосов
/ 22 августа 2013

Я проверил cvtColor в справочнике OpenCV и нашел это:

C ++: void cvtColor (InputArray src , OutputArray dst , int код , int dstCn = 0)

dstCn - Количество каналов в целевом изображении. Если параметр равен 0, количество каналов определяется автоматически из src и кода.

Я использовал

cvtColor(src,gray,CV_BGR2GRAY,1);

для преобразования 3-канального мата в 1-канальный, и это сработало. Таким образом, изменение dstCn на 3 может работать для вас:)

7 голосов
/ 02 сентября 2010

Попробуйте это:

CvSize dim = cvSize(int width, int height);
IplImage* dst = cvCreateImage( dim, 8, 3 );
IplImage* gray = cvCreateImage(dim, 8, 1);
// Load the gray scale image
cvMerge(gray , NULL, NULL, NULL, dst);
cvShowImage("gray",gray);
cvShowImage("dst",dst);
cvWaitKey(0);

Типы данных dst и grey должны быть одинаковыми. Вы не можете просто объединить число с плавающей точкой в ​​матрицу uint. Для этого вам придется использовать cvScale.

3 голосов
/ 02 сентября 2010

Попробуйте объединить серый, серый, серый в BGR.

0 голосов
/ 31 декабря 2013

ИМХО: Если вход серый, то выход будет серый. Лучшее, что вы можете получить, - это цветное распределенное изображение на основе данных пикселей, скажем, (110, 110, 110) для данных пикселей 110, а не истинное цветное изображение

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