Нао Робот: Как использовать ROI ALImage

Что я хочу сделать:

Конвертируйте ROI изображения с камеры Nao Robot в формате OpenCV :: Mat. Позже я буду использовать этот OpenCV :: Mat

Ситуация:

Nao SDK предоставит изображение в формате под названием ALImage. Можно конвертировать ALImage в формат OpenCV :: Mat, но мне не нужно все изображение, только небольшой ROI. Несмотря на то, что ALImage предоставляет свои ROI, методы его использования не очень полезны:

int        getNumOfROIs () const
const ROI* getROI (int index) const
void       addROI (const ROI &rect)
void       cleanROIs ()
void       setEnableROIs (bool enable)
bool       isROIEnabled () const

Вопрос:

Как я могу использовать эти РИ?

0

Решение

Предполагая, что у вас уже есть координаты вашего ROI, вы можете обрезать cv::Mat лайк этот:

// your source image
cv::Mat image(imagesource);

// a rectangle with your ROI coordinates
cv::Rect myROI(10, 10, 100, 100);

// a "reference" to the image data within the rectangle
cv::Mat croppedImage = image(myROI);

Обратите внимание, что это делает не скопируйте данные изображения. И то и другое, image а также croppedImage использовать одни и те же исходные данные (подробный пример можно найти в документация opencv). Когда вы закончите с большим исходным изображением, вы можете сделать image.release() а также croppedImage = croppedImage.clone(); освободить все ненужные данные (за пределами вашей рентабельности).

РЕДАКТИРОВАТЬ:

Я не работал с AL::ALImage::ROI пока, но определение в alimage / alimage.h выглядит знакомо cv::Rect, Так что вы, вероятно, можете сделать следующее:

// let's pretend you already got your image ...
AL::ALImage yourImage;
// ... and a ROI ...
AL::ALImage::ROI yourROI;
// ... as well as a Mat header with the dimensions and type of yourImage
cv::Mat header;

// then you can convert the ROI, ...
cv::Rect cvROI(yourROI.x, yourROI.y, yourROI.w, yourROI.h);
// ... wrap ALImage to a Mat (which should not copy anything) ...
header.data = yourImage.getData();
// ... and then proceed with the steps mentioned above to crop your Mat
cv::Mat cropped = header(cvROI);
header.release();
cropped = cropped.clone();

// ...
// your image processing using cropped
// ...

Надеюсь, это поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]