ProgRoman 9 Жалоба Опубликовано June 27, 2011 Добрый день у меня возникла следующая трудность загружаю цветную картинку далее необходимо работать с цветовыми компонентами отдельно для этого использую split вот код Mat img= imread("C:/images/1_1.jpg"); Mat chan[3]; Mat zr(img.rows,img.cols,CV_8UC1); zr.zeros(zr.rows,zr.cols,CV_8UC1); split(img,chan); Mat timg(img.rows, img.cols,CV_8UC3); Mat mchan[3]; mchan[0]=chan[0];mchan[1]=em;mchan[2]=em; merge(mchan,3,timg); imshow("2:",timg); этот код выполняется но если начать выводить каждую компоненту на просмотр т.е. R G и B то он не выводит изображение в оттенках B G и R если выводить только chan то выведется серое изображение вот отсюда я подумал, что возможно что то не так разбивается на каналы может я что-то не то делаю код ниже вообще не работает Mat img= imread("C:/images/1_1.jpg"); vector<Mat> chan; Mat zr(img.rows,img.cols,CV_8UC1); zr.zeros(zr.rows,zr.cols,CV_8UC1); split(img,chan); тут выбрасывается исключение vector iterator + offset out of range вот.. подскажите пожалуйста что не так я делаю с разбиением изображения на каналы Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано June 27, 2011 Так и должно быть, каждый отдельный канал цвета - это всего лишь массив яркостей. Если система не знает какой компонентой R G или B управляет этот слой, она выводит его как серый цвет разной интенсивности. Однослойное изображение интерпретируется как изображение в серых тонах. Вам, для вывода компоненты его цветом, проще всего просто обнулить другие компоненты и собрать изображение заново. Ведь Вы хотите видеть цветное изображение, то есть многоканальное, в данном случае каналов три. Во втором случае, видимо нужно зарезервировать память под вектор, хотя не проверял, могу ошибаться. Мне, честно говоря,не понятно зачем там вектор, ведь каналов всегда постоянное количество, а вектор это дополнительные накладные расходы. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах