python+opencv3.3视频教学笔记 17 超大图像二值化

对于分辨率比较大的图片,可以先将其分块后再对其进行二值化

import cv2 as cv
import numpy as np


def huge_image(image):
    h, w = image.shape[:2]
    cw = 128
    ch = 128
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    for row in range(0, h, ch):  # 以ch为步长进行循环
        for col in range(0, w, cw):  # 以cw为步长进行循环
            roi = gray[row:row+ch, col:col+cw]  # 从灰度图中获取感兴趣区域
            print(np.std(roi), np.mean(roi))  # 打印ROI区域的标准差及均值
            # dst = cv.adaptiveThreshold(roi, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)  # 局部阈值
            ret, dst = cv.threshold(roi, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)  # 全局阈值
            gray[row:row+ch, col:col+cw] = dst  # 将灰度图中的对应小块替换为二值化后的图像
    cv.imwrite("D:/opencv/binary.jpg", gray)

print("---------Hello Python ---------")
src = cv.imread("D:/opencv/zitie.jpg")

print(src.shape)
huge_image(src)
cv.waitKey(0)
cv.destroyAllWindows()

空白图像过滤
部分空白图像在拍照时可能会产生噪点,而对该部分噪点进行二值化后可能会产生我们不想要的结果,因此我们可以根据其标准差,直接将其设置为白色,代码如下:

def huge_image(image):
    h, w = image.shape[:2]
    cw = 43
    ch = 43
    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:col+cw]
            # dst = cv.adaptiveThreshold(roi, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)  # 局部阈值
            print(np.std(roi), np.mean(roi))
            dev = np.std(roi)
            if dev < 15:
                gray[row:row + ch, col:col + cw] = 255  # 直接设为白色
            else:
                ret, dst = cv.threshold(roi, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)  # 全局阈值
                gray[row:row+ch, col:col+cw] = dst
    cv.imwrite("D:/opencv/binary.jpg", gray)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值