将值pixel与int进行比较

compare value pixel with int

本文关键字:比较 int pixel 将值      更新时间:2023-10-16

我有一个由distanceTransform完成的Mat DistCV_8U)。

现在我必须检查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。我在visualstudio 2015中修改了异常,但没有修改。我哪里错了?

函数distanceTransform不返回ad CV_8U,它是CV_32,正如我们在文档中看到的:

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

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

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

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

labels–可选输出2D标签阵列(离散Voronoi图表)。它的类型为CV_32SC1,大小与src相同。请参阅详细信息如下。

因此,在这种情况下,您应该将其作为int 访问

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

我希望这对你有帮助。

顺便说一下,也许ε值而不是0会更好。。。。