C++ 使用OpenCV进行3通道图像访问
我有一个名为Mat的2D向量,它的值从0到255,我分配给一个IPLIMAGE,如下所示: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] } } 我以为我可以一个频道一个频道地做,最后把它们全部合并,但我真的认为这不是最佳解决方案 在这种情况下,您知道
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)