0

我有一个 700x1 大小的矩阵作为“srcMat”。我使用以下命令为空矩阵“dstMat”赋值:

cv::Mat dstMat ( srcMat.rows, srcMat.cols, srcMat.type() ); 

for ( int i = 0; i <  medianMat.cols ; i ++ )
{
   dstMat( cv::Range::all(), cv::Range( i*5+1, i*5+4 )).setTo(srcMat.at<int>(i));
}

但这里的问题是:dstMat 在“for”循环之外(之后)全为零,但在循环内部,它正是我想要的值。这里有什么问题?提前谢谢了。

4

1 回答 1

0

我认为问题在于每次您尝试选择一个范围时,您都在处理只读值。所以你失去了所有的价值,他们都没有得到真正的矩阵。

正如在 opencv 文档中所写,从返回的值operator()const,因此您无法使用返回的值编辑矩阵:

Mat Mat::operator()( Range rowRange, Range colRange)常量

但是,如果您使用 setTo 的第二个掩码参数,您应该没有问题:

Mat& Mat::setTo(const Scalar& s, const Mat& mask=Mat() )

编辑

我会使用 colRange 复制和选择列,以下代码适用于我:

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

int main( int argc, char** argv )
{
  cv::Mat dstMat ( 3, 12, CV_32S );

  for(int i = 0; i < 6; i++)
    dstMat.colRange(2*i,2*i+2).setTo(i);

  std::cout<< "Destination\n" << dstMat << std::endl;
  return 0;
}

检查它是否也为你改变了矩阵

于 2012-08-13T21:15:43.190 回答