opencv将一个矩阵复制到另一个矩阵的第一列

时间:2012-05-16 12:25:19

标签: c++ image-processing opencv matrix

我有一个指针向量指向一个图像(大小w = 96 h = 100 NoImg = 100),这是我从我的camrea和framegrabber得到的。你看到我正在创建它们的矩阵并开始逐个像素地读取数据。下一步是创建一个更大的矩阵(h = 9600 w = 100),它可以保存第一列中一个图像的所有像素数据,下一个图像数据保存到第二列,但是我达到100的时间的图像。 我想知道opencv中有没有足够的方法或预先准备好的方法,这有助于我将所有图像数据直接复制到另一个矩阵的一列?或者我需要逐个读取所有像素,就像我下面的代码一样,将它们逐个写入另一个像素中? 的修改 我最终得到以下代码

cv::Mat _mainMatrix(_imageSize,_totalImgNO,CV_8UC1);    
//loop for creating a matrix of each image in the memory
for(counter=0;counter<_totalImgNO;counter++){
    unsigned char* _pointer=(unsigned char*)_imgPtrVector.at(counter);
    cv::Mat _matrixImage(cv::Size(width,height), CV_8UC1,_pointer , cv::Mat::AUTO_STEP);         
    channels=_matrixImage.channels();
    nRows=_matrixImage.rows * channels;
    nCols=_matrixImage.cols;
    if (_matrixImage.isContinuous())
    {
        nCols *= nRows;
        nRows = 1;
    }
    for(int i = 0; i < nRows; ++i)
    {
        p = _matrixImage.ptr<uchar>(i);
        for (int  j = 0; j < nCols; ++j)
        {
            if(iRow<_totalImgNO && jCol<_imageSize){                
                _mainMatrix.at<uchar>(iRow,jCol)=p[j];
                iRow++;
            }               
        }
    }
    jCol++;
    iRow=0; 
    _matrixImage.~Mat();            
}

2 个答案:

答案 0 :(得分:2)

OpenCV迭代器是STL迭代器。这意味着,您可以在它们上使用STL函数。

粗略的例子:

cv::Mat1b bigmat(9600, 100);
for (int i = 0; i < bigmat.cols; ++i) {
    cv::Mat1b column = bigmatrix.col(i);
    cv::Mat1b &source = *(images[i]);
    std::copy(source.begin(), source.end(), column.begin());
}

答案 1 :(得分:1)

我认为你想要的是非常接近重塑功能。

告诉我,如果我错了:)

Opencv Reshape

相关问题