J'utilisais un seuil fixe mais il s'avère que ce n'est pas si bon pour moi. Ensuite, quelqu'un m'a parlé du seuil otsu. Comment puis-je l'utiliser dans mon code? J'ai lu à ce sujet et je ne comprends pas très bien. Quelqu'un pourrait-il m'expliquer comment l'utiliser dans OpenCV le seuil otsu?
Voici mon code maintenant:
#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;
}
Avec cela, je dois changer le seuil pour n'importe quelle image que je veux convertir en binaire. J'ai trouvé ça:
cvThreshold(scr, dst, 128, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
Est-ce correct? Je ne comprends pas très bien et à cause de cela, je ne savais pas comment m'adapter à mon code.
La ligne suivante effectue l'opération de seuillage otsu:
cv::threshold(im_gray, img_bw, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
im_gray
est une image source 8 bits,img_bw
est un résultat,CV_THRESH_BINARY | CV_THRESH_OTSU
est un indicateur requis pour effectuer le seuillage Otsu. Parce qu'en fait, nous aimerions effectuer un seuillage binaire, nous utilisons donc CV_THRESH_BINARY
(vous pouvez utiliser l'un des 5 drapeaux fournis par opencv) combiné avec CV_THRESH_OTSU
Lien vers la documentation: http://docs.opencv.org/modules/imgproc/doc/miscivers_transformations.html#threshold
En python c'est simple
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()
Dans Android est une ligne.
Imgproc.threshold(matGrayIn, matOtsuOut, 0, 255, Imgproc.THRESH_OTSU | Imgproc.THRESH_BINARY);