我使用的是固定阈值,但事实证明它对我来说不太好。然后,有人告诉我大津阈值。我如何在我的代码中使用它?我读过它,但我不太了解。有人可以向我解释如何在 OpenCV 中使用 otsu 阈值吗?
现在这是我的代码:
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main ( int argc, char **argv )
{
Mat im_gray = imread("img3.jpg",CV_LOAD_IMAGE_GRAYSCALE);
Mat im_rgb = imread("img3.jpg");
cvtColor(im_rgb,im_gray,CV_RGB2GRAY);
Mat img_bw = im_gray > 115;
imwrite("img_bw3.jpg", img_bw);
return 0;
}
有了这个,我必须将阈值更改为我想要转换为二进制的任何图像。我发现了这个:
cvThreshold(scr, dst, 128, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
是吗?我不太了解,因此不知道如何适应我的代码。
以下行进行 otsu 阈值操作:
cv::threshold(im_gray, img_bw, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
im_gray
是源 8 位图像,
img_bw
是一个结果,
- 0 表示阈值级别,实际上被省略了,因为我们使用了 CV_THRESH_OTSU 标志,
- 255 是将分配给结果中各个像素的值(即,分配给源中的值大于计算阈值水平的所有像素)
CV_THRESH_BINARY | CV_THRESH_OTSU
是执行 Otsu 阈值化的必需标志。因为实际上我们想执行二进制阈值处理,所以我们使用 CV_THRESH_BINARY
(您可以使用 opencv 提供的 5 个标志中的任何一个)结合 CV_THRESH_OTSU
文档链接:http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#threshold
我是一名优秀的程序员,十分优秀!