我们可以在opencv中创建n通道图像,n将在20左右

时间:2012-06-14 13:20:32

标签: opencv image-processing mat

目前我正致力于寻找立体声对的差异。我有一个创建20通道数据集的情况,当我声明3维数组时它给出错误,而是我可以创建20个通道的图像,以便我可以存储数据。如果我可以包含什么附加条件,我必须包括在没有任何内存分配错误或排序的情况下获得结果....创建一个20个频道的图像对我来说会很舒服......

2 个答案:

答案 0 :(得分:13)

OpenCV的C ++接口提供cv::Mat,它取代并改进了C接口的IplImage类型。这个新类型提供了几个构造函数,包括the one below,可用于通过参数type指定所需的通道数:

Mat::Mat(int rows, int cols, int type)

示例代码:

#include <cv.h>
#include <highgui.h>
#include <iostream>

void test_mat(cv::Mat mat)
{
    std::cout << "Channels: " << mat.channels() << std::endl;
}

int main(int argc, char* argv[])
{
    cv::Mat mat20(1024, 768, CV_8UC(20));
    test_mat(mat20);

    return 0;
}

答案 1 :(得分:3)

Opencv实现了小型矩阵的模板类,其类型和大小在编译时是已知的:

template<typename _Tp, int m, int n> class Matx {...};

你可以创建一个Matx部分个案的指定模板,就像那些已经用opencv为1,2或3个“通道”编写的那些cv :: Vec那样:

typedef Vec<uchar, 3> Vec3b; // 3 channel -- written in opencv 
typedef Vec<uchar, 20> Vec20b; // the one you need

然后,声明一个新的(20通道uchar)对象的矩阵:

cv::Mat_<Vec20b> myMat;
myMat.at<Vec20b>(i,j)(10) = .. // access to the 10 channel of pixel (i,j)