我正在创建一个多维MAT对象,并希望得到对象的大小 - 例如,
const int sz[] = {10,10,9};
Mat temp(3,sz,CV_64F);
std::cout << "temp.dims = " << temp.dims << " temp.size = " << temp.size() << " temp.channels = " << temp.channels() << std::endl;
Run Code Online (Sandbox Code Playgroud)
我相信得到的MAT是10x10x9,我想确认一下,但是COUT声明给出了:
temp.dims = 3 temp.size = [10 x 10] temp.channels = 1
我希望看到:
temp.dims = 3 temp.size = [10 x 10 x 9] temp.channels = 1
要么:
temp.dims = 3 temp.size = [10 x 10] temp.channels = 9
如何获得此Mat对象的维度?我在Mat :: Mat或MatND中没有看到任何方法
根据这篇 文章和OpenCV文档,我可以初始化和访问多维Mat的每个元素.
实际上,我首先在MATLAB中编码,现在需要转换为OpenCV.MATLAB矩阵支持子矩阵访问,如:a(:,:,3)或b(:,:,3:5)
这可以在OpenCV中完成吗?据我所知,这可以用2D Mat完成.那个2D怎么样?
Edit01:此外,对于多维Mat,属性cols和行不足以表征矩阵的3种大小.有些尺寸大于3的情况.如何存储这些属性?
Edit02:
// create a 100x100x100 8-bit array
int sz[] = {100, 100, 100};
Mat bigCube(3, sz, CV_8U, Scalar::all(0));
Run Code Online (Sandbox Code Playgroud)
我放弃了使用OpenCV Mat进行子矩阵访问的想法.也许,它在OpenCV中不受支持.但是从这个示例代码中,构造函数从'sz'接收第三维.Mat第三维的哪个属性被传递给?可能在这种情况下,行= 100,cols = 100,另一个?? = 100我丢失了OPenCV文档
Edit03:从OpenCV源跟踪Mat类我从mat.hpp找到了Edit02中构造函数的定义:
inline Mat::Mat(int _dims, const int* _sz, int _type, const Scalar& _s)
: flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
{
create(_dims, _sz, _type);
*this = _s;
}
Run Code Online (Sandbox Code Playgroud)
接下来的问题是定义"创建"功能的位置和方式?=>在OpenCV中跟踪这个Mat定义可能有助于我在Mat矩阵中修改/自定义我自己的特性
PS:不好意思,如果我的帖子太乱了!我是一个novic程序员,试图解决我的编程问题.如果我的方法不好或不够正确,Plz可以随意纠正我.谢谢!!
我想在OpenCV中从我的颜色(3通道)图像中获取直方图,但每次我都像这样做calcHist直方图:
//int histSize[3];
//float hranges[2];
//const float* ranges[3];
//int channels[3];
ColorHistogram::ColorHistogram()
{
// Prepare arguments for a color histogram
histSize[0]= histSize[1]= histSize[2]= 256;
hranges[0]= 0.0; // BRG range
hranges[1]= 255.0;
ranges[0]= hranges; // all channels have the same range
ranges[1]= hranges;
ranges[2]= hranges;
channels[0]= 0; // the three channels
channels[1]= 1;
channels[2]= 2;
}
cv::MatND ColorHistogram::getHistogram(const cv::Mat &image)
{
cv::MatND hist;
// Compute histogram
cv::calcHist(&image,
1, // histogram of 1 image only
channels, // the channel used
cv::Mat(), // no …Run Code Online (Sandbox Code Playgroud)