Я пытаюсь получить доступ ко всему каналу в 3-канальном изображении в opencv (чтобы заменить канал целой матрицей, см. ниже). Можно ли сделать это без перебора значений отдельных пикселей?
Mat RGB(320, 480, CV_8UC3)
Mat R(320, 480, CV_8UC1)
Mat G(320, 480, CV_8UC1)
Mat B(320, 480, CV_8UC1)
// First channel of RGB = R
// second channel of RGB = G
// third channel fo RGB = B
BGRBGRBGR
для первых 3 пикселей в первой строке, вы не можете легко получить доступ/манипулировать только одним каналом, не извлекая его сначала (cv::split
), и вы не можете легко установить какую-либо область памяти для этого канала без его выравнивания (cv::merge
). Поскольку не существует пошаговой копии (согласно stackoverflow.com/ questions/17090742/copying-stried-data-in-c ), я думаю, что openCV внутренне использует какой-то цикл, но это все же может быть более эффективным, чем ручной цикл, поскольку они могут использовать некоторые оптимизации. - person Micka   schedule 02.04.2014