Opencv 将非零值转换为一

Opencv 将非零值转换为一,opencv,Opencv,在Matlab中,我可以使用逻辑(img)将所有非零元素转换为一 是否有一种简单的方法(即不使用循环)将cv::Mat中存储的所有非零数据转换为OpenCV中的一个 谢谢 为了方便起见,您可以在OpenCV中使用threshold()函数。 你提到了“非零”元素。如果矩阵中有负数,但仍希望将其设置为1,请使用阈值(abs(my_mat),…) 一般来说,这也可以通过以下方式实现: Mat my_mat; Mat reference = Mat::zeros( rows, cols, type )

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

是否有一种简单的方法(即不使用循环)将cv::Mat中存储的所有非零数据转换为OpenCV中的一个


谢谢

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

一般来说,这也可以通过以下方式实现:

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

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

这会更长,可能看起来更混乱,但它的优点是
reference
可以根据需要调整为除全零以外的其他值(例如,可以是渐变)。此外,
为了方便起见,您可以在OpenCV中使用
threshold()
函数。 你提到了“非零”元素。如果矩阵中有负数,但仍希望将其设置为1,请使用
阈值(abs(my_mat),…)

一般来说,这也可以通过以下方式实现:

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

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

这会更长,可能看起来更混乱,但它的优点是
reference
可以根据需要调整为除全零以外的其他值(例如,可以是渐变)。另外,
有许多函数可以帮助您,但这取决于您拥有什么以及您试图获得什么

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

img = (img != 0);
这将把矩阵的任何非零值转换为255。我知道您想将其转换为1,但如果255对您来说足够好,那么这是最好的方法。在我过去遇到的任何任务中,转换为255总是比转换为1好,因为您可以将结果图像用于所有类型的按位操作,如逻辑AND、OR等

2) 若您确实希望转换为1,并且您的矩阵是正整数(或chars或shorts),则可以使用函数


3) 您也可以按照@Roger Rowland的建议使用函数。

有很多函数可以帮助您,但这取决于您拥有什么以及您试图获得什么

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

img = (img != 0);
这将把矩阵的任何非零值转换为255。我知道您想将其转换为1,但如果255对您来说足够好,那么这是最好的方法。在我过去遇到的任何任务中,转换为255总是比转换为1好,因为您可以将结果图像用于所有类型的按位操作,如逻辑AND、OR等

2) 若您确实希望转换为1,并且您的矩阵是正整数(或chars或shorts),则可以使用函数


3) 您还可以使用@Roger Rowland建议的函数。

您想将.mat文件加载到openCV中吗?对不起,我误导了您。我的意思是cv::Mat。我想你需要用几个循环来“硬编码”它。用“简单/短代码”或“快速处理”来形容快速?哪种数据类型?浮动乌查尔?智力?就要编写的代码行而言,是“快速”吗?如果是这样,请使用.mat文件。您想将.mat文件加载到openCV中吗?对不起,我误导了您。我的意思是cv::Mat。我想你需要用几个循环来“硬编码”它。用“简单/短代码”或“快速处理”来形容快速?哪种数据类型?浮动乌查尔?智力?就要编写的代码行而言,是“快速”吗?如果是,请使用。