固定のしきい値を使用していましたが、私にはあまり良くないことがわかりました。次に、誰かが大津の敷居について教えてくれました。コードでどのように使用できますか?私はそれについて読んだのですが、よくわかりません。誰かが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);
そうですか?私はあまりよく理解しておらず、そのために、どのようにコードに適応できるのか分かりませんでした。
次の行は、大津しきい値操作を行います:
cv::threshold(im_gray, img_bw, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
im_gray
はソースの8ビット画像です。img_bw
は結果です。CV_THRESH_BINARY | CV_THRESH_OTSU
は、大津しきい値処理を実行するために必要なフラグです。実際、バイナリしきい値処理を実行したいので、CV_THRESH_BINARY
(opencvが提供する5つのフラグのいずれかを使用できます)とCV_THRESH_OTSU
ドキュメントへのリンク: http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#threshold
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()
In Androidは1行です。
Imgproc.threshold(matGrayIn, matOtsuOut, 0, 255, Imgproc.THRESH_OTSU | Imgproc.THRESH_BINARY);