RinOS 16 Жалоба Опубликовано April 25, 2011 Всем привет! Есть трёхслойная картинка image3D = cvCreateImage( imageSize, IPL_DEPTH_32F, 3 ); Как можно получить значения каждого канала? cхематично изображу так x = getnvalue(image3D,0,0,0) y = getnvalue(image3D,1,0,0) z = getnvalue(image3D,3,0,0) Знаю способ используя COI cvSetImageCOI(image3D, 3); cvCopy(image3D, imageZ, 0); cvResetImageROI(image3D); Но по моему медленно тк потом придется гонять 3 цикла для каждого слоя Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 25, 2011 // split the image into separate color planes vector<Mat> planes; split(img_yuv, planes); http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html?highlight=split#split слои=каналы? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TroyashkA 12 Жалоба Опубликовано April 26, 2011 Всем привет! Есть трёхслойная картинка image3D = cvCreateImage( imageSize, IPL_DEPTH_32F, 3 ); Как можно получить значения каждого канала? cхематично изображу так x = getnvalue(image3D,0,0,0) y = getnvalue(image3D,1,0,0) z = getnvalue(image3D,3,0,0) Знаю способ используя COI cvSetImageCOI(image3D, 3); cvCopy(image3D, imageZ, 0); cvResetImageROI(image3D); Но по моему медленно тк потом придется гонять 3 цикла для каждого слоя Всё просто: for(int y=0; y<image->height; y++) { byte* data = (byte*)(image->imageData + y * image->widthStep); for(int x=0; x<image->width; x++) { data[3*x]; // B - синий data[3*x+1]; // G - зелёный data[3*x+2]; // R - красный } } 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах