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 = 0
和 maxval = 1
,以及 type=CV_THRESH_BINARY
。回想一下使用CV_THRESH_BINARY
时,会出现以下关系:
(来源:opencv.org)
因此,如果您将 thresh
指定为 0,将 maxval
指定为 1,您实际上是在执行 MATLAB 代码正在执行的操作。任何大于 thresh=0
的像素,它们本质上是非零的,您将这些强度设置为 1。我假设您希望输入和输出图像为 浮点 ,所以要确保图像是兼容的类型,例如CV_32FC1
,或CV_32FC3
,等等。
我想在 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 = 0
和 maxval = 1
,以及 type=CV_THRESH_BINARY
。回想一下使用CV_THRESH_BINARY
时,会出现以下关系:
(来源:opencv.org)
因此,如果您将 thresh
指定为 0,将 maxval
指定为 1,您实际上是在执行 MATLAB 代码正在执行的操作。任何大于 thresh=0
的像素,它们本质上是非零的,您将这些强度设置为 1。我假设您希望输入和输出图像为 浮点 ,所以要确保图像是兼容的类型,例如CV_32FC1
,或CV_32FC3
,等等。