0

我有一个名为 Mat 的二维向量,其值从 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 个 2D 向量 Mat1、Mat2、Mat3 和一个通道数等于 3 的 IPLIMAGE 呢:

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

我以为我可以逐个频道做,最后合并它们,但我真的相信这不是最佳解决方案。

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

4

2 回答 2

0

如果您查看 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 通道图像的方法。

于 2013-06-26T08:23:30.817 回答
0

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

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

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

于 2013-06-26T08:07:21.080 回答