Comment utiliser le seuil OTSU dans opencv?
j'utilisais un seuil fixe mais il s'avère que ce n'est pas si bon pour moi. Puis, quelqu'un m'a parlé du seuil d'otsu. Comment puis-je l'utiliser dans mon code? Je l'ai lu et je ne comprends pas très bien. Quelqu'un pourrait-il m'expliquer comment l'utiliser 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 ceci je dois changer le seuil à n'importe quelle image que je veux convertir en binaire. J'ai trouvé ceci:
cvThreshold(scr, dst, 128, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
Est ce que le droit? Je Je ne comprends pas très bien et à cause de ça, Je ne savais pas comment m'adapter à mon code.
27
demandé sur
U23r
2013-06-17 10:27:12
3 réponses
la ligne suivante fait l'opération de battage otsu:
cv::threshold(im_gray, img_bw, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
im_gray
est une source d'image 8 bits,img_bw
- 0 signifie seuil de seuil qui est en fait omis parce que nous avons utilisé CV_THRESH_OTSU flag,
- 255 est une valeur qui va être assignée respectivement aux pixels dans le résultat (à savoir, à tous les pixels dont la valeur dans la source est plus grande que le seuil calculé niveau)
CV_THRESH_BINARY | CV_THRESH_OTSU
est un drapeau requis pour effectuer le battage Otsu. Parce qu'en fait nous aimerions effectuer le battage binaire, donc nous utilisonsCV_THRESH_BINARY
(vous pouvez utiliser l'une des 5 drapeaux opencv) combiné avecCV_THRESH_OTSU
lien vers la documentation: http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#threshold
63
répondu
marol
2013-06-19 09:42:17
en python c'est simple
import cv2
a = imread('img.jpg',0) #pass 0 to convert into gray level
ret,thr = cv2.threshold(a, 0, 255, cv2.THRESH_OTSU)
cv2.imshow('win1', thr)
cv2.waitKey(0)
cv2.destroyAllWindows()
4
répondu
ashish
2018-03-09 18:18:29
Dans Android est une ligne.
Imgproc.threshold(matGrayIn, matOtsuOut, 0, 255, Imgproc.THRESH_OTSU | Imgproc.THRESH_BINARY);
0
répondu
JFrank
2017-04-21 07:56:43