首页 文章

如何在opencv中使用OTSU阈值?

提问于
浏览
31

我使用的是一个固定的门槛,但事实证明这对我来说并不是那么好 . 然后,有人告诉我关于otsu门槛的事 . 如何在我的代码中使用它?我读到了它,我不太了解 . 有人可以向我解释如何在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);

是对的吗?我不太了解,因此,我不知道如何适应我的代码 .

3 回答

  • 4

    Following line makes otsu thresholding operation:

    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

  • 0

    在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()
    
  • 68

    在Android中是一行 .

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

相关问题