我正在使用一个名为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吗?
答案 0 :(得分:0)
首先,请注意,如果Mat
已对齐,则可以避免编写第一个代码,方法是直接指定imageData
的{{1}}结构成员。您必须使用IplImage
而不是cvCreateImageHeader
来避免为图像分配数据。有关该结构的更多信息可以在here找到。
其次,关于你的问题 - 可以通过我前面提到的技术创建三个图像,然后使用cvCreateImage
来生成最终图像。更多信息here。
一般情况下,我建议您迁移到OpenCV的C ++界面,该界面使用cvMerge
而不是旧的cv::Mat
界面。
答案 1 :(得分:0)
如果您查看C ++ API的OpenCV教程,可以使用Mat。
提供了3种访问3通道图像的方法。