Loops 矩阵都是零,超出了循环
我有一个矩阵作为srcMat,大小为700x1。我使用以下命令为空矩阵dstMat赋值:Loops 矩阵都是零,超出了循环,loops,opencv,for-loop,matrix,reset,Loops,Opencv,For Loop,Matrix,Reset,我有一个矩阵作为srcMat,大小为700x1。我使用以下命令为空矩阵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)); } 但
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));
}
但这里的问题是:在for循环之后,dstMat在外部都是零,但在循环内部,它正好有我想要的值。这里有什么问题?非常感谢 我认为问题在于每次尝试选择一个范围时,都是在处理只读值。 所以你失去了所有的值,没有一个能进入真正的矩阵 正如opencv文档中所述,运算符返回的值是常量,因此不能使用返回值编辑矩阵: Mat Mat::运算符范围行范围、范围列范围常数 但是,如果使用setTo的第二个掩码参数,则应该没有问题: Mat&Mat::setToconst标量&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;
}
检查是否也改变了矩阵您能否提供更多关于什么是dstMat、medianMat及其大小和值的详细信息,以便我们可以运行块并进行测试……亲爱的Kamyar,非常感谢您的回答。我尝试了好几次在setTo中使用掩码,但都失败了。对于如何使用它,您有任何示例代码或建议吗?我对OpenCV还很陌生。再次感谢你。至于.creating masks需要更多的代码,你应该在你想复制的地方放1,在你不想复制的地方放0。我已经用colRange编辑了我的答案,你可以试着看看它是否适合你亲爱的Kamyar,非常感谢你的有用答案。关于。