相关疑难解决方法(0)

拆分扫描文档中的文本行

我试图找到一种方法来打破已经自适应阈值化的扫描文档中的文本行.现在,我存储文档为无符号的整数0到255的像素值,并且这是我在像素的平均值中的每一行,以及我基于像素值的平均值是否是线分割成的范围大于250,然后我取每个范围的线的中位数.但是,这种方法有时会失败,因为图像上可能会出现黑色斑点.

是否有更加抗噪的方式来完成这项任务?

编辑:这是一些代码."扭曲"是原始图像的名称,"剪切"是我想要分割图像的地方.

warped = threshold_adaptive(warped, 250, offset = 10)
warped = warped.astype("uint8") * 255

# get areas where we can split image on whitespace to make OCR more accurate
color_level = np.array([np.sum(line) / len(line) for line in warped])
cuts = []
i = 0
while(i < len(color_level)):
    if color_level[i] > 250:
        begin = i
        while(color_level[i] > 250):
            i += 1
        cuts.append((i + begin)/2) # middle of the whitespace region
    else:
        i += 1
Run Code Online (Sandbox Code Playgroud)

编辑2:添加了示例图像 在此输入图像描述

python ocr opencv scikit-image

28
推荐指数
2
解决办法
1万
查看次数

通过每两点之间的距离对集群中的点进行分组的高效算法

我正在为以下问题寻找一种有效的算法:

给定 2D 空间中的一组点,其中每个点由其 X 和 Y 坐标定义。需要将这组点拆分为一组簇,以便如果两个任意点之间的距离小于某个阈值,则这些点必须属于同一簇:

样本集群

换句话说,这样的集群是一组彼此“足够接近”的点。

朴素算法可能如下所示:

  1. R是一个结果簇列表,最初为空
  2. P是一个点列表,最初包含所有点
  3. P 中随机选取一个点并创建一个仅包含该点的集群C。P 中删除该点
  4. 对于来自P 4a 的每个点Pi。对于来自C 4aa 的每个点Pc。如果distance(Pi, Pc) < 阈值,则将Pi添加到C并将其从P 中删除
  5. 如果在步骤 4中至少有一个点被添加到集群C,则转到步骤 4
  6. 将集群C添加到列表R。如果P不为空,则转到步骤 3

然而,天真的方法是非常低效的。我想知道这个问题是否有更好的算法?

PS我不知道先验的簇数

algorithm cluster-analysis machine-learning data-mining

7
推荐指数
2
解决办法
2967
查看次数

Python:使用 OpenCV 从左上到右下对项目进行排序

我如何尝试从左上角到右下角对图片的项目进行排序,如下图所示?当前使用以下代码收到此错误。

错误:

a = sorted(keypoints, key=lambda p: (p[0]) + (p 1 ))[0] # 找到左上点 ValueError: 包含多个元素的数组的真值不明确。使用 a.any() 或 a.all()

这个问题是从这个建模的:Ordering坐标从左上角到右下角

def preprocess(img):
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img_blur = cv2.GaussianBlur(img_gray, (5, 5), 1)
    img_canny = cv2.Canny(img_blur, 50, 50)
    kernel = np.ones((3, 3))
    img_dilate = cv2.dilate(img_canny, kernel, iterations=2)
    img_erode = cv2.erode(img_dilate, kernel, iterations=1)
    return img_erode

image_final = preprocess(picture_example.png)
keypoints, hierarchy = cv2.findContours(image_final, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
points = []

while len(keypoints) > 0:
    a = sorted(keypoints, key=lambda p: (p[0]) + (p[1]))[0]  # find …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing python-3.x

5
推荐指数
1
解决办法
489
查看次数