3使用OpenCV进行频道图像访问

时间:2013-06-26 07:56:00

标签: c++ opencv

我正在使用一个名为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个2D矢量Mat1,Mat2,Mat3和一个通道数等于3的IPLIMAGE怎么样:

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

我认为我可以逐个频道地完成它并将它们全部合并到一起,但我真的相信它不是最佳解决方案。

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

2 个答案:

答案 0 :(得分:0)

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

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

一般情况下,我建议您迁移到OpenCV的C ++界面,该界面使用cvMerge而不是旧的cv::Mat界面。

答案 1 :(得分: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通道图像的方法。