【问题标题】:3 Channel image access using OpenCV3 使用 OpenCV 的通道图像访问
【发布时间】:2013-06-26 16:23:30
【问题描述】:

我有一个名为 Mat 的 2D 向量,其值从 0 到 255 分配给 IPLIMAGE,如下所示:

 IplImage *A=cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 1)
 for (int i=0;i<640;i++)
{
 for (j...)
 {
    A->imageData[i*640+j]=Mat[i][j]
 }
}

但是如果我有 3 个二维向量 Mat1、Mat2、Mat3 和一个通道数等于 3 的 IPLIMAGE:

IplImage *A=cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 3)

我认为我可以逐个通道并最终将它们全部合并,但我真的认为这不是最佳解决方案。

知道在这种情况下如何访问 3 个通道的 imageData 吗?

【问题讨论】:

  • 你为什么使用旧的 C API?使用 C++ Mat 类会更容易。

标签: c++ opencv


【解决方案1】:

首先,请注意,如果Mat 对齐,则可以通过直接分配IplImage 的结构成员imageData 来避免编写第一个代码。您必须使用cvCreateImageHeader 而不是cvCreateImage 以避免为图像分配数据。可以在here 找到有关该结构的更多信息。

其次,关于您的问题 - 可以通过我前面提到的技术创建三个图像,然后使用 cvMerge 生成最终图像来做到这一点。更多信息here

一般来说,我建议你迁移到OpenCV的C++接口,它使用cv::Mat而不是旧的IplImage接口。

【讨论】:

    【解决方案2】:

    如果您查看 C++ API 的 OpenCV 教程,这里有使用 Mat 的示例。

    http://docs.opencv.org/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html#the-iterator-safe-method

    提供了 3 种访问 3 通道图像的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2020-05-07
      相关资源
      最近更新 更多