如何使用C ++在opencv中填充二进制矩阵

时间:2016-05-02 10:25:48

标签: c++ opencv

我想从另一个名为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) 

它无法进入循环来填充矩阵。任何人都知道我的错误是什么?

1 个答案:

答案 0 :(得分:0)

我在您的代码中看到2个错误:

这里有一个;i<c.width;。它应该是;k<c.width;

,此处有另一个错误fgMask.at<uchar>(k,l)

k是指宽度,所以说话的方式是列,而l是指行,所以它应该是:

fgMask.at<uchar>(l,k)

另外,您应该提供更多信息,例如cv::Rect c如何初始化?它可能是任何东西......