【发布时间】:2014-05-13 15:39:21
【问题描述】:
我正在尝试访问 opencv 中 3 通道图像中的整个通道(用整个矩阵替换通道,见下文)。是否可以在不遍历单个像素值的情况下这样做?
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
【问题讨论】:
-
您想提高性能还是只是让代码更具可读性?
-
提高性能...
-
由于第一行前 3 个像素的内存布局为
BGRBGRBGR,因此如果不先提取一个通道,您将无法轻松访问/操作一个通道 (cv::split),您也无法轻松为该通道设置一些内存区域而不对齐它(cv::merge)。由于不存在“跨步复制”(根据 stackoverflow.com/questions/17090742/copying-strided-data-in-c),我猜 openCV 内部使用了某种循环,但这仍然可能比手动循环更有效,因为它们可能会使用一些优化。
标签: c++ opencv image-processing mat