使用引用时,cv :: Mat头信息会发生变化

时间:2012-01-10 16:23:39

标签: opencv

我宣布

cv::Mat imageMatrix(bitmapEntry->GetHeight(), bitmapEntry->GetWidth(), ConvertToCVType(bitmapEntry), imageBytes);
cv::Mat rightImageMat;
cv::Mat leftImageMat;
SplitCVMatrix(imageMatrix, leftImageMat, rightImageMat);

我得到2160行和7680列,这是预期的。

当我通过引用将此矩阵传递给函数时,矩阵的结构是不同的:

OVOpenCVFilter::SplitCVMatrix(cv::Mat &matrix, cv::Mat &leftSplitMatrix, cv::Mat &rightSplitMatrix)

行等于2,步骤为7680,列为2160。

我没有收到我通过的相同结构。好像我在地址上得到什么,我应该怎样处理才能正确传递我的矩阵?

2 个答案:

答案 0 :(得分:1)

我写了这段代码:

void SplitCVMatrix(cv::Mat &matrix, cv::Mat &leftSplitMatrix, cv::Mat &rightSplitMatrix) {
    printf("rows: %d, columns: %d, step: %ld", matrix.rows, matrix.cols, matrix.step[0]);
}

int main(int argc, const char * argv[]) {

    cv::Mat imageMatrix(2160, 7680, CV_8UC3, cv::Scalar(128, 128, 128));
    cv::Mat rightImageMat;
    cv::Mat leftImageMat;
    SplitCVMatrix(imageMatrix, leftImageMat, rightImageMat);

    return 0;
}

得到了这个输出:

rows: 2160, columns: 7680, step: 23040

所以我不同意你的说法,即原始的imageMatrix被正确构建(或者SplitCVMatrix中发生了一些你没有向我们展示的事情)。您需要更仔细地查看传递给imageMatrix构造函数的值。

答案 1 :(得分:0)

这就是我所拥有的:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace std;
using namespace cv;

void printFromReference(Mat& src)
{
    cout << "Rows: " << src.rows << endl;
    cout << "Cols: " << src.cols << endl;
    cout << "Step: " << src.step << endl;
    cout << "Size: " << src.rows*src.cols*src.elemSize1() << endl;
}

int main(int argc, char** argv)
{
    Mat bigImage(2160, 7680, CV_8UC1);

    cout << "Before: " << endl;
    cout << "Rows: " << bigImage.rows << endl;
    cout << "Cols: " << bigImage.cols << endl;
    cout << "Step: " << bigImage.step << endl;
    cout << "Size: " << bigImage.rows*bigImage.cols*bigImage.elemSize1() << endl;

    cout << endl << "After: " << endl;
    printFromReference(bigImage);

    return 0;
}

这会产生以下输出:

Before: 
Rows: 2160
Cols: 7680
Step: 7680
Size: 16588800

After: 
Rows: 2160
Cols: 7680
Step: 7680
Size: 16588800

所以,我倾向于同意SSteve ......你正在做的其他事情并没有正常工作......如果SplitCVMatrix函数中你的步长看起来不正确,那么你需要确保你的ConvertToCVType函数告诉构造函数要创建适当数量的通道。这只是一个猜测;一些代码会有所帮助:)