2016-11-15 4 views
0

Скажем, у меня есть 100x100 cv::Mat1b под названием image. Тогда я:Поддерживает ли cv :: Mat_ свою рентабельность?

cv::Mat1b subImage = image(cv::Rect(0,0,49,49)); 

Чтобы получить верхний левый угол image в subImage. Затем скажите, что передаю subImage функции, скажем cv::findContours. Результирующие контуры будут относиться к image или subImage? То есть findContours() знает, что subImage на самом деле является суб-изображением? Или все функции OpenCV обрабатывают только subImage, как это показано в виде «полного изображения», а затем ответственность за добавление угла выделенной области в каждую из координат пикселей контура (в данном примере) контур, как интерпретируется в оригинале image?

ответ

1

Суб-изображение рассматривается как полное изображение, функции, называемые суб-изображением, не знают, что это не полное изображение.

Функция findcontour однако действительно принимает необязательный параметр координат ROI, так что координаты контура возвращаются относительно полного изображения В качестве альтернативы вы можете просто добавить смещение к каждой точке контура

+0

Ах, я вижу, что аргумент в настоящее время, интересно. Хорошо подтвердить, что по умолчанию, хотя ничто не предполагает, что изображение может быть субимажем. –

+0

@DavidDoria, функции не обрабатывают суб-изображения по-разному (хотя данные присутствуют, чтобы определить, что они являются субимажем) findcontour - это особый случай, потому что вы так часто хотите сделать это с помощью контуров –

1

Если вы объявляете Растр, как :

Mat1b subImage = image(cv::Rect(0,0,49,49)); 

затем subImage будет принят в качестве полного объекта коврика любой функции OpenCV. Однако любое изменение, сделанное в subImage, будет отражено в соответствующей части image.

Если вы хотите, чтобы исключить изменения, сделанные в subImage от image, вы должны использовать:

Mat1b subImage = image(cv::Rect(0,0,49,49)).clone(); 

Теперь у вас есть subImage, не указывая на image

 Смежные вопросы

  • Нет связанных вопросов^_^