大津法python

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   
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;
}

你可能感兴趣的:(大津法python)