将非零值转换为一

时间:2014-11-10 10:31:52

标签: opencv

在Matlab中,我可以使用逻辑(img)将所有非零元素转换为一个。

是否有一种简单的方法(即没有循环)将存储在cv :: Mat中的所有非零转换为OpenCV中的一个?

谢谢!

2 个答案:

答案 0 :(得分:4)

有许多功能可以帮助你,但这取决于你拥有什么以及你想要获得什么。

1)OpenCV具有函数compare和运算符'!='(以及您可能需要的任何其他运算符)。你可以写:

img = (img != 0);

这会将矩阵的任何非零值转换为255.我知道你想将它转换为1,但如果255对你来说足够好,那么这是最好的方法。在过去遇到的任何任务中,转换为255总是比转换为1更好,因为您可以将结果图像用于各种按位操作,如逻辑AND,OR等......

2)如果你想转换为1,矩阵是正整数(或字符或短路),你可以使用函数min

img = min(img,1);

3)你也可以使用函数threshold作为@Roger Rowland建议。

答案 1 :(得分:0)

为方便起见,您可以在OpenCV中使用threshold()函数。 你提到“非零”元素。如果您的矩阵具有负数,并且您仍希望将其设置为1,请使用threshold( abs(my_mat), .. )

一般来说,这也可以通过以下方式完成:

Mat my_mat;
Mat reference = Mat::zeros( rows, cols, type );

Mat result = (abs(my_mat) > reference)/255;

这个更长,可能看起来更麻烦,但它的优点是reference可以根据需要调整为除了全零之外的其他东西(例如,它可以是渐变)。此外,< 不是唯一可以适合的运算符 - 可以使用任何逻辑运算符。逻辑运算的结果总是0或255,因此是除法。