Да, в OpenCV это безопасно.
Внутренне функция, подобная:
void somefunction(InputArray _src, OutputArray _dst);
, сделает что-то вроде:
Mat src = _src.getMat();
_dst.create( src.size(), src.type() );
Mat dst = _dst.getMat();
// dst filled with values
Итак, если src
и dst
:
create
фактически ничего не сделает, а модификации эффективно на месте . Некоторые функции могут clone
отображать src
внутри, если операция не может быть на месте (например, findConturs
в OpenCV> 3.2), чтобы гарантировать правильное поведение. create
создайте новую матрицу dst
без изменения src
. В документации указано, что это поведение по умолчанию не выполняется.
Примечательным примером является findContours
, которые изменяют матрицу src
. Вы справляетесь с этим, обычно проходя src.clone()
во входе, так что изменяется только клонированная матрица, но не та, которую вы клонировали.
Из OpenCV 3.2, findContours
не изменяет входное изображение .
Благодаря Фернандо Бертольди для рассмотрения ответа