Конструктор для InputOutputArray принимает const cv :: Mat&в конструкторе, что означает, что это компилируется без каких-либо предупреждений или ошибок.
Почему InputOutputArray принимает константную ссылку Mat. Я понимаю, почему InputArray принимает константную ссылку, но OutputArray действительно не должен
void this_shouldnt_compile(const cv::Mat& mat) {
// const, so the header should not be modifiable
// but the data is
putText(mat, "some text", cvPoint(0,10),
FONT_HERSHEY_COMPLEX_SMALL, 0.8,
cvScalar({0,255,0}), 1, CV_AA);
}
Так что конструктор для cv::_InputOutputArray::_InputOutputArray (const Mat & m)
в самом деле существует
Глядя на https://github.com/opencv/opencv/issues/7298 Кажется, что
«Блокировка» доступа к базовым данным недоступна ни во время компиляции, ни во время выполнения. За это отвечает разработчик ».
«… может быть, нет реального решения (даже с c ++ 17)»
«Подобные проблемы хорошо известны в C ++ и не являются уникальными для OpenCV».
Других решений пока нет …