将值像素与int进行比较

时间:2016-04-06 09:55:37

标签: c++ opencv opencv3.1

Mat Dist完成了CV_8UdistanceTransform)。

现在我必须检查Dist的每个坐标是> 0并修改另一个Mat M = Mat :: zeros

的值

代码是

      int main(){
              ....

               for(i=0;i<Dist.rows;++i)
               {
                    for(j=0;j<Dist.cols;++j)
                    {
                   if(Dist.at<uchar>(i,j) > 0){
                     M.at<uchar>(i,j)=2;
                      }
                    }
              }
            ....
            }

但我错误cv :: exception。

我查看了文档和其他地方,我试图从uchar更改为vec3b。我修改了visual studio 2015中的异常,但没有。 我哪里错了?

1 个答案:

答案 0 :(得分:0)

函数distanceTransform不返回广告CV_8U,它是CV_32,我们可以在documentation中看到:

  

dst - 输出具有计算距离的图像。这是一个32位   与src大小相同的浮点单通道图像。

所以代码不应该读取uchar,而是浮动

...
if(Dist.at<float>(i,j) > 0.f)
...

如果你使用了距离变换的标签,我们在文档中有以下内容:

  

标签 - 可选输出2D标签阵列(离散Voronoi   图)。它的类型为CV_32SC1,大小与src相同。见   详情如下。

因此,在这种情况下,您应该以int

的形式访问它
...
if(Dist.at<int>(i,j) > 0)
...

我希望这会对你有所帮助。

顺便说一句,也许epsilon值而不是0会更好....