Я немного смущен type()
методом Mat
объекта в OpenCV.
Если у меня есть следующие строки:
mat = imread("C:\someimage.jpg");
type = mat.type();
и type = 16
. Как узнать, что это за мат-матрица ?.
Я тщетно пытался найти ответ в его мануале или в паре книг.
opencv
opencv-mat
Тэ-Сун Шин
источник
источник
depth()
иchannels()
вместо использования,type()
которое возвращает сложное сочетание типа данных и количества каналов.depth()
коды, что намного сложнееtype()
.Ответы:
Вот удобная функция, которую вы можете использовать, чтобы помочь с идентификацией ваших матриц opencv во время выполнения. По крайней мере, я считаю это полезным для отладки.
Если
M
это тип типа var,Mat
вы можете назвать его так:Будет выводить такие данные, как:
Стоит отметить, что существуют также методы Matrix
Mat::depth()
иMat::channels()
. Эта функция - всего лишь удобный способ получить понятную для человека интерпретацию комбинации тех двух значений, биты которых хранятся в одном и том же значении.источник
depth
иchans
можно было использовать макросыCV_MAT_DEPTH(type)
иCV_MAT_CN(type)
соответственно. Их тип также должен быть такимint
, чтобы вы могли использоватьto_string(chans)
вместоchans+'0'
.В целях отладки, если вы хотите найти необработанный Mat :: type в отладчике:
Так, например, если type = 30, то тип данных OpenCV - CV_64FC4. Если type = 50, то тип данных OpenCV - CV_16UC (7).
источник
В заголовке OpenCV « types_c.h » есть набор определений, которые их генерируют, формат таков,
CV_bits{U|S|F}C<number_of_channels>
например,
CV_8UC3
означает 8-битные символы без знака, 3 цветовых канала - каждое из этих имен отображается на произвольное целое число с макросами в этом файле.Изменить: см. " Types_c.h ", например:
Итак,
CV_8UC3 = 16
но вы не должны использовать это число, просто проверьтеtype() == CV_8UC3
, нужно ли вам знать, какой тип внутреннего массива OpenCV.Помните, что OpenCV преобразует jpeg в BGR (или шкалу серого, если вы передадите «0»
imread
) - поэтому он ничего не скажет вам об исходном файле.источник
types_c.h
он находится в основном модуле, например, если у вас установлен OpenCV непосредственно на диске C в папке opencv_2.4.11, файл заголовка будет в C: \ opencv_2.4.11 \ build \ include \ opencv2 \ core \ types_c .hcv::CV_8U
нажать правой кнопкой мыши и выбратьGo to Definition
открытие файла, в которомcv::CV_8U
определено, что естьtypes_c.h
.Я всегда использую эту ссылку, чтобы узнать, какой тип числа я получаю
type()
:СПИСОК ТИПОВ МАТОВ В OPENCV
Я надеюсь, что это может вам помочь.
источник
Я добавил удобство использования функции из ответа @Octopus для целей отладки.
источник
На этот вопрос ответили еще несколько человек, но я нашел решение, которое мне очень понравилось.
источник