C++ 使用OpenCV进行3通道图像访问

C++ 使用OpenCV进行3通道图像访问,c++,opencv,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] } } 我以为我可以一个频道一个频道地做,最后把它们全部合并,但我真的认为这不是最佳解决方案 在这种情况下,您知道

我有一个名为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个通道的imageData吗?

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

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


<>一般来说,我建议您迁移到OpenCV的C++接口,使用<代码> CV::Mat < /C> >代替旧的代码> IplImage < /C>接口。< /P> < P>如果您在C++的API中看OpenCV教程,有一个使用Mat .< /P>的例子。


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

为什么要使用旧的C API?这将是更容易的C++ Mat类。
IplImage *A=cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 3)