如何在opencv中使用大津阈值?

如何在opencv中使用大津阈值?,opencv,threshold,Opencv,Threshold,我使用了一个固定的阈值,但结果证明它对我不太好。然后,有人告诉我大津的门槛。如何在代码中使用它? 我读过,但我不太明白。有人能给我解释一下如何在OpenCV中使用大津阈值吗 这是我现在的代码: #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main ( int argc, char **argv ) { M

我使用了一个固定的阈值,但结果证明它对我不太好。然后,有人告诉我大津的门槛。如何在代码中使用它? 我读过,但我不太明白。有人能给我解释一下如何在OpenCV中使用大津阈值吗

这是我现在的代码:

#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;
}  
是这样吗?
我不太明白,因此,我不知道如何适应我的代码。

下面的行使大津阈值运算:

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\u THRESH\u binary
    (您可以使用opencv提供的5个标志中的任何一个)与
    CV\u THRESH\u OTSU
文档链接:

在python中,它很简单

import cv2

img = cv2.imread('img.jpg',0)  #pass 0 to convert into gray level 
ret,thr = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU)
cv2.imshow('win1', thr)
cv2.waitKey(0)  
cv2.destroyAllWindows()

在Android中只有一行

Imgproc.threshold(matGrayIn, matOtsuOut, 0, 255, Imgproc.THRESH_OTSU | Imgproc.THRESH_BINARY);
Imgproc.threshold(matGrayIn, matOtsuOut, 0, 255, Imgproc.THRESH_OTSU | Imgproc.THRESH_BINARY);