opencv+python实现彩色图片二值化 图片

2025-10-27 09:08:53

1、二值图像处理分为两大步:

第一步:把彩色图像或图片处理成灰度片或图像(简称灰度化),

第二大步: 把灰度图通过阈值或者直方图或者自适应等方法转化为二值化图片。

opencv+python实现彩色图片二值化 图片

2、第一大步:

1.1)imread加载图片

img = cv.imread('c:\\meiping1.png')

1.2)将彩色图片转化为灰度图,采用函数进行。

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

经过这两句话 灰度图产生了!

opencv+python实现彩色图片二值化 图片

opencv+python实现彩色图片二值化 图片

3、第二大步:

2.1)全局阈值法:

采用 cv.threshold进行处理,

参数:

thresholdValue: 阈值   two_value: 返回的二值图像   cv.THRESH_BINARY |cv.THRESH_OTSU: THRESH_BINARY是灰度图二值化,THRESH_OTSU是二值化的算法

def thresholdGlob(gray):

    thresholdValue, two_value = cv.threshold(gray, 0, 255, cv.THRESH_BINARY |cv.THRESH_OTSU)

    print('thresholdValue %s :' % (thresholdValue))

    cv.imshow('thresholdGlob', two_value)

opencv+python实现彩色图片二值化 图片

4、2.2)局部自适应

采用 cv.adaptiveThreshold进行处理,

参数:

adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)       adaptiveMethod: 有两种method ADAPTIVE_THRESH_GAUSSIAN_C和ADAPTIVE_THRESH_MEAN_C,    thresholdType: 二值化的方式    blockSize: 最好是奇数    C: 偏置值

def local_threshold(gray):    binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)    cv.imshow('local_threshold_GAUSSIAN-binary', binary)

opencv+python实现彩色图片二值化 图片

5、2.3)自定义阈值函数1

本质也是使用cv.threshold

def custom_threshold(gray):    h, w = gray.shape[:2]    m = np.resize(gray, [1, w*h])    mean = m.sum() / (w*h)    print('mean : ', mean)    ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY)    cv.imshow('custom_threshold', binary)

opencv+python实现彩色图片二值化 图片

6、2.4)自定义阈值函数2

利用阈值分值处理 大于Th_value=255 否则为0

def threshold_one_block(image, Th_value):    # img = np.array(image, 'f')    # im_l = image.convert('L')    tmp_img = copy.copy(image)  # 复制一份

   rows, cols = tmp_img.shape #已经是灰度图 只有2路    print(rows, cols)    for rows in range(tmp_img.shape[0]):        for cols in range(tmp_img.shape[1]):            if tmp_img[rows,cols] < Th_value:  #阈值条件判断                tmp_img[rows, cols] = 0            else:                tmp_img[rows, cols] = 255    return  tmp_img

opencv+python实现彩色图片二值化 图片

7、调用:

tmp0 = threshold_one_block(gray, 85)  #设置不同阈值cv.imshow('tmp0',tmp0)tmp1 = threshold_one_block(gray, 127) #设置不同阈值

cv.imshow('tmp1',tmp1)tmp2 = threshold_one_block(gray, 192) #设置不同阈值

cv.imshow('tmp2',tmp2)

图片二值有较大不同。

opencv+python实现彩色图片二值化 图片

opencv+python实现彩色图片二值化 图片

opencv+python实现彩色图片二值化 图片

opencv+python实现彩色图片二值化 图片

8、thresholdGlob(gray)  local_threshold(gray)custom_threshold(gray)

分别进行运行。

opencv+python实现彩色图片二值化 图片

9、整体感觉 感觉local_threshold要好一些。

自定义的可以比较灵活的进行处理。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢