OpenCV 相当于 MATLAB 中的阈值

OpenCV equivalent for thresholding in MATLAB

我想在 OpenCV C++ 中实现这个 MATLAB 语句:

 bwImgLabeled(bwImgLabeled > 0) = 1;

据我从当时的 OpenCV 文档了解,http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold, 我需要做的:

cv::threshold(dst, dst, 0, 1, CV_THRESH_BINARY);

我说得对吗?

是的,你是对的。 MATLAB 代码所做的是搜索任何非零像素并将它们设置为 1。

回忆cv::threshold的定义:

double threshold(InputArray src, OutputArray dst, 
                 double thresh, double maxval, int type)

所以前两个输入是源图像和目标图像,在您的情况下,您想要获取目标图像并将其变异为包含最终图像。 thresh = 0maxval = 1,以及 type=CV_THRESH_BINARY。回想一下使用CV_THRESH_BINARY时,会出现以下关系:


(来源:opencv.org

因此,如果您将 thresh 指定为 0,将 maxval 指定为 1,您实际上是在执行 MATLAB 代码正在执行的操作。任何大于 thresh=0 的像素,它们本质上是非零的,您将这些强度设置为 1。我假设您希望输入和输出图像为 浮点 ,所以要确保图像是兼容的类型,例如CV_32FC1,或CV_32FC3,等等。