目前我正在寻找立体对的差异。我在创建 20 个通道数据集时遇到了一种情况,当我声明 3 维数组时它给出了错误,我可以创建 20 个通道的图像以便我可以存储数据。如果可以的话,我必须包括哪些附加条件才能获得结果,而不会出现任何内存分配错误或......。创建 20 个通道的图像对我来说甚至会很舒服......
问问题
3765 次
2 回答
14
OpenCV 的 C++ 接口出现cv::Mat
,替代并改进了IplImage
C 接口的类型。这种新类型提供了几个构造函数,包括下面的构造函数,它可用于通过 param 指定所需的通道数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;
}
于 2012-06-14T13:32:52.667 回答
3
Opencv 为编译时已知类型和大小的小矩阵实现模板类:
template<typename _Tp, int m, int n> class Matx {...};
您可以创建 Matx 部分案例的指定模板,它是 cv::Vec,就像那些已经在 opencv 中为 1,2 或 3 个“通道”编写的模板一样:
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)
于 2012-06-14T13:43:50.133 回答