You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenCV中实现Leptonica的pixReduceRankBinary2与pixCloseBrick功能

OpenCV 等效实现方案

1. pixReduceRankBinary2 对应实现

Leptonica 中该函数的作用是对二值图像做2倍降采样:遍历每个2x2的滑动窗口,当窗口内前景像素数量≥指定rank值时,输出对应降采样位置的像素为前景。你传入的rank为2,即2x2窗口中至少有2个前景像素时才保留前景,连续调用两次等价于累计做4倍降采样。
OpenCV 没有直接对应的原生接口,可通过以下自定义函数实现完全等效的逻辑:

import cv2
import numpy as np

def reduce_rank_binary_2x2(bin_img, rank=2):
    # bin_img 为输入二值图,支持0/1或0/255取值
    foreground_val = 255 if bin_img.max() > 1 else 1
    # 计算2x2窗口内的前景像素和
    sum_kernel = np.ones((2, 2), dtype=np.uint8)
    window_sum = cv2.filter2D(bin_img, -1, sum_kernel, borderType=cv2.BORDER_CONSTANT)
    # 筛选满足rank要求的像素
    rank_res = (window_sum >= rank * foreground_val).astype(np.uint8) * foreground_val
    # 执行2倍降采样,取每个窗口的左上角点位
    return rank_res[::2, ::2]

# 对应原代码的两次调用
img = reduce_rank_binary_2x2(img, 2)
img = reduce_rank_binary_2x2(img, 2)

如果对精度要求不高,也可以直接调用cv2.pyrDown()做近似的2倍降采样,性能会更好。

2. pixCloseBrick 对应实现

该函数就是使用指定尺寸的矩形(砖形)结构元执行形态学闭运算,OpenCV有原生对应接口,你传入的参数2、3对应宽度为2、高度为3的矩形核,实现代码如下:

# 生成2x3的矩形结构元
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 3))
# 执行闭运算,等价于pixCloseBrick
img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

注意:所有操作均需要保证输入图像为二值图,若输入为灰度图需要先通过cv2.threshold()做二值化处理。

内容的提问来源于stack exchange,提问作者Joe Cabezas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:45:03