我想从另一个名为fgMask的矩阵填充矩阵,所以我写这个程序:
Mat dest;
dest.create(fgMask.size(),fgMask.type());
dest=cv::Scalar(0.0f);
for(int i=4;i<fgMask.rows-4;++i){
for(int j=4;j<fgMask.cols-4;++j){
bool white = true;
for(int k=c.x;i<c.width;++k){
for(int l=c.y;l<c.height;++l){
if(fgMask.at<uchar>(k,l)>0){
white=false;
}
if(white){
dest.at<uchar>(i,j)=255;
}
else
{
dest.at<uchar>(i,j)=0;
}
}
}
}
}
return dest;
但是当我调试它时,我得到了:
Mat dest;
(gdb) n
56 dest.create(fgMask.size(),fgMask.type());
(gdb) n
57 dest=cv::Scalar(0.0f);
(gdb)
60 for(int i=4;i<fgMask.rows-4;++i){
(gdb)
61 for(int j=4;j<fgMask.cols-4;++j){
(gdb)
62 bool white = true;
(gdb)
63 for(int k=c.x;i<c.width;++k){
(gdb)
64 for(int l=c.y;l<c.height;++l){
(gdb)
63 for(int k=c.x;i<c.width;++k){
(gdb)
64 for(int l=c.y;l<c.height;++l){
(gdb)
63 for(int k=c.x;i<c.width;++k){
(gdb)
64 for(int l=c.y;l<c.height;++l){
(gdb)
63 for(int k=c.x;i<c.width;++k){
(gdb)
64 for(int l=c.y;l<c.height;++l){
(gdb)
63 for(int k=c.x;i<c.width;++k){
(gdb)
64 for(int l=c.y;l<c.height;++l){
(gdb)
63 for(int k=c.x;i<c.width;++k){
(gdb)
64 for(int l=c.y;l<c.height;++l){
(gdb)
63 for(int k=c.x;i<c.width;++k){
(gdb)
64 for(int l=c.y;l<c.height;++l){
(gdb)
63 for(int k=c.x;i<c.width;++k){
(gdb)
64 for(int l=c.y;l<c.height;++l){
(gdb)
63 for(int k=c.x;i<c.width;++k){
(gdb)
64 for(int l=c.y;l<c.height;++l){
(gdb)
它无法进入循环来填充矩阵。任何人都知道我的错误是什么?
答案 0 :(得分:0)
我在您的代码中看到2个错误:
这里有一个;i<c.width;
。它应该是;k<c.width;
,此处有另一个错误fgMask.at<uchar>(k,l)
k
是指宽度,所以说话的方式是列,而l
是指行,所以它应该是:
fgMask.at<uchar>(l,k)
另外,您应该提供更多信息,例如cv::Rect c
如何初始化?它可能是任何东西......