Разница в типах кодов OpenCV

Каковы различия между типами OpenCV cv::Mat?

Чтобы быть более конкретным, в чем разница между CV_64F и CV_64FC1 или CV_64FC2? Какой из них следует использовать, когда я создаю объект cv::Mat, который будет иметь значения double?

Ответ 1

Cx часть показывает количество каналов в изображении. То есть образ типа CV_64FC1 является простым полутоновым изображением и имеет только 1 канал:

image[i, j] = 0.5

а изображение типа CV_64F3 - цветное изображение с тремя каналами:

image[i, j] = (0.5, 0.3, 0.7)

(в С++ вы можете проверить отдельные пиксели как image.at<double>(i, j))

CV_64F совпадает с CV_64FC1. Поэтому, если вам нужна только 2D-матрица (т.е. Одноканальная), вы можете просто использовать CV_64F


ИЗМЕНИТЬ

В общем случае имя типа объекта Mat состоит из нескольких частей. Здесь пример для CV_64FC1:

  • CV_ - это только префикс
  • 64 - количество бит на базовый матричный элемент (например, значение пикселя в изображении в оттенках серого или одноцветный элемент в изображении BGR)
  • F - тип базового элемента. В этом случае он F для float, но может также быть S (подписанный) или U (без знака)
  • Cx - количество каналов в изображении, как я изложил ранее