【opencv学习笔记 17超大图像的二值化】

超大图像的二值化

  • 分块

思路

将超大的图像使用切割划分成固定的大小的图片,然后对小图进行二值化处理,处理完之后再重新组合回。这样就实现了整个超大图像的二值化处理。

相关代码

import cv2 as cv
import numpy as np


def big_image_binary(image):
    """
    超大图像的二值化
    :param image:
    :return:
    """
    print(image.shape)
    cw = 256
    ch = 256
    # 获取整个图像的宽高
    h, w = image.shape[:2]
    # 转换为灰度图像
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    #
    for row in range(0, h, ch):
        for col in range(0, w, cw):
            # 切割成小份 对每一小份进行二值化
            roi = gray[row:row+ch, col:cw+col]
            print(np.std(roi), np.mean(roi))
            # 计算标准差
            dev = np.std(roi)
            # 如果标准差比较小的时候,说明是空白图像
            if dev < 15:
                gray[row:row + ch, col:cw + col] = 255
            else:
                # 这里面如果使用自适应阈值则效果更好
                ret, dst = cv.threshold(roi, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
                gray[row:row + ch, col:cw + col] = dst
    cv.imwrite("tree1.jpg", gray)


src = cv.imread("tree.jpg")
big_image_binary(src)
cv.waitKey(0)

cv.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值