将值像素与 int 进行比较
compare value pixel with int
我有一个 Mat Dist
(CV_8U
) 由 distanceTransform
完成。
现在我要检查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 中修改了异常,但没有修改。
我哪里错了?
函数 distanceTransform
没有 return 和 CV_8U,它是 CV_32 正如我们在 documentation:
中看到的
dst – Output image with calculated distances. It is a 32-bit
floating-point, single-channel image of the same size as src .
所以代码不应该读取uchar,而是float
...
if(Dist.at<float>(i,j) > 0.f)
...
如果您使用距离变换的标签,在文档中我们有以下内容:
labels – Optional output 2D array of labels (the discrete Voronoi
diagram). It has the type CV_32SC1 and the same size as src . See the
details below.
因此,在这种情况下,您应该将其作为 int
...
if(Dist.at<int>(i,j) > 0)
...
希望对您有所帮助。
顺便说一下,也许 epsilon 值而不是 0 会更好....
我有一个 Mat Dist
(CV_8U
) 由 distanceTransform
完成。
现在我要检查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 中修改了异常,但没有修改。 我哪里错了?
函数 distanceTransform
没有 return 和 CV_8U,它是 CV_32 正如我们在 documentation:
dst – Output image with calculated distances. It is a 32-bit floating-point, single-channel image of the same size as src .
所以代码不应该读取uchar,而是float
...
if(Dist.at<float>(i,j) > 0.f)
...
如果您使用距离变换的标签,在文档中我们有以下内容:
labels – Optional output 2D array of labels (the discrete Voronoi diagram). It has the type CV_32SC1 and the same size as src . See the details below.
因此,在这种情况下,您应该将其作为 int
...
if(Dist.at<int>(i,j) > 0)
...
希望对您有所帮助。
顺便说一下,也许 epsilon 值而不是 0 会更好....