46

私は固定しきい値を使用していましたが、それは私にはあまり良くないことがわかりました。そしたら、大津敷居のことを教えてくれました。コードでどのように使用できますか? 私はそれについて読みましたが、よくわかりません。誰かが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;
    }  

これにより、しきい値を、バイナリに変換したい任意の画像に変更する必要があります。私はこれを見つけました:

    cvThreshold(scr, dst, 128, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

そうですか?私はよく理解していません。そのため、自分のコードにどのように適応できるかわかりませんでした。

4

3 に答える 3

84

次の行は、大津のしきい値操作を行います。

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_OTSUOtsu しきい値処理を実行するために必要なフラグです。実際にはバイナリしきい値処理を実行したいので、CV_THRESH_BINARY(opencv が提供する 5 つのフラグのいずれかを使用できます) と組み合わせて使用​​します。CV_THRESH_OTSU

ドキュメントへのリンク: http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#threshold

于 2013-06-19T09:42:17.107 に答える
16

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()
于 2016-02-06T18:28:47.987 に答える