大津法python
阿新 • • 發佈:2018-10-31
http://blog.csdn.net/u012771236/article/details/44975831
import numpy as np
def OTSU_enhance(img_gray, th_begin=0, th_end=256, th_step=1):
assert img_gray.ndim == 2, "must input a gary_img"
max_g = 0
suitable_th = 0
for threshold in xrange(th_begin, th_end, th_step):
bin_img = img_gray > threshold
bin_img_inv = img_gray <= threshold
fore_pix = np.sum(bin_img)
back_pix = np.sum(bin_img_inv)
if 0 == fore_pix:
break
if 0 == back_pix:
continue
w0 = float(fore_pix) / img_gray.size
u0 = float(np.sum(img_gray * bin_img)) / fore_pix
w1 = float(back_pix) / img_gray.size
u1 = float(np.sum(img_gray * bin_img_inv)) / back_pix
# intra-class variance
g = w0 * w1 * (u0 - u1) * (u0 - u1)
if g > max_g:
max_g = g
suitable_th = threshold
return suitable_th
#include "opencv2\opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat frame = imread("11.png" );
imshow("src", frame);
cvtColor(frame, frame, COLOR_BGR2GRAY);//影象灰度化
threshold(frame, frame, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);//大津法
imshow("大津法", frame);
waitKey(0);
return 0;
}