相关疑难解决方法(0)

我如何获得多维cv :: Mat的大小?(Mat或MatND)

我正在创建一个多维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中没有看到任何方法

c++ opencv mat

17
推荐指数
2
解决办法
2万
查看次数

访问OpenCV中多维Mat的子矩阵

根据这篇 文章和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可以随意纠正我.谢谢!!

matlab opencv matrix

7
推荐指数
1
解决办法
1万
查看次数

读取直方图后的未处理异常(使用calcHist创建)

我想在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)

c++ opencv histogram unhandled-exception

5
推荐指数
1
解决办法
1973
查看次数

标签 统计

opencv ×3

c++ ×2

histogram ×1

mat ×1

matlab ×1

matrix ×1

unhandled-exception ×1