我有一个指针 vector ,它们指向我从我的 camrea 和 framegrabber 获得的图像(尺寸 w=96 h=100 NoImg=100)。 az 你看我正在创建它们的矩阵并开始逐个像素地读取数据。下一步是创建一个更大的矩阵(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();
}
最佳答案
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());
}
关于c++ - opencv将一个矩阵复制到另一个矩阵的第一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10618468/