gpt4 book ai didi

python - 创建冒号作为 openCV 和 Python 中形态学操作的内核/结构元素

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:39 24 4
gpt4 key购买 nike

我有很多图片需要进行图像处理。

enter image description here

基本上我想在图像中找到 :-character 的位置。检查完这些图像后,我发现这是我所有图像的唯一共同点。由于所有图像均取自视频流,因此所有数字在视频流期间的某个时间都会/可能会发生变化。

查看 openCV 的文档还有这个post我写了以下内容:

import cv2
import numpy as np


def skeletonize(img):
size = np.size(img)
skel = np.zeros(img.shape,np.uint8)

ret,img = cv2.threshold(img,127,255,0)
element = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
done = False

while( not done):
eroded = cv2.erode(img,element)
temp = cv2.dilate(eroded,element)
temp = cv2.subtract(img,temp)
skel = cv2.bitwise_or(skel,temp)
img = eroded.copy()

zeros = size - cv2.countNonZero(img)
if zeros==size:
done = True

return skel

这会产生以下输出:

enter image description here

接下来,我编写基于冒号的结构元素:

img = cv2.imread('chi_int.JPG')
skel = skeletonize(img)
kernel = np.array([[0,0,0],
[0,0,0],
[0,1,0],
[0,0,0],
[0,0,0],
[0,1,0],
[0,0,0],
[0,0,0]], dtype=np.uint8)
erosion = cv2.erode(skel,kernel,iterations = 1

如何测量结构元素中两个 1 之间需要填充 0 的行数?通过使用骨骼化函数,如果我的结构元素具有正确的大小,则应该有1像素。我该如何解决这个问题?非常感谢您的帮助!!

enter image description here

注意:我不想使用 Tesseract OCR,因为它太慢了

最佳答案

在找到冒号之前,没有什么神奇的方法可以知道它的大小,除非您知道字体大小。所以你必须尝试所有可能的选择。但它似乎并不高效和可靠。我推荐以下内容。

  1. 阈值处理后立即通过 findContours 查找连接的组件。
  2. 只保留那些小而圆的(小contourArea、小arcLength()/contourArea())。
  3. 计算它们的中心。
  4. 搜索 x 方向距离较小且 y 方向距离合理的对。通过按 x 坐标对点数组进行排序,可以非常有效地完成此操作。

关于python - 创建冒号作为 openCV 和 Python 中形态学操作的内核/结构元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58892121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com