Sou*_*rty 0 opencv imagemagick python-3.x image-morphology
我正在尝试预处理我的图像以从中删除水平线和垂直线(某些 OCR 需要)。我得到了一些 Image Magick 代码来做同样的事情,效果很好。下面是片段:
magick convert ( img_name.jpg )
( -clone 0 -morphology close rectangle:1x50 -negate +write tmp1.png )
( -clone 0 -morphology close rectangle:50x1 -negate +write tmp2.png )
( -clone 1 -clone 2 -evaluate-sequence add +write tmp3.png )
-delete 1,2
-compose plus -composite
result.jpg
Run Code Online (Sandbox Code Playgroud)
这是从以下链接获得的(完全归功于他们):
问题是即使 Image Magick 运行良好,但在高分辨率图像上需要很长时间(这是我主要拥有的)。所以我试图将上面的代码片段转换为 Open CV Python 代码。我已经为步骤 1 和 2 编写了部分代码。
步骤 1 和 2:
magick convert ( img_name.jpg )
( -clone 0 -morphology close rectangle:1x50 -negate +write tmp1.png )
( -clone 0 -morphology close rectangle:50x1 -negate +write tmp2.png )
( -clone 1 -clone 2 -evaluate-sequence add +write tmp3.png )
-delete 1,2
-compose plus -composite
result.jpg
Run Code Online (Sandbox Code Playgroud)
但是,我无法执行第 3 步和第 4 步,因为我不确定评估序列运算符的作用。我在网上查过,但不是很明白。如果有人能够帮助我翻译剩余的步骤,我将不胜感激。
这是 Python/OpenCV 中的等效命令。
输入:
import cv2
import numpy as np
img = cv2.imread('document.png')
# do morphology to locate vertical lines and invert
kernel_vertical = cv2.getStructuringElement(cv2.MORPH_RECT, (1,50))
temp1 = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel_vertical)
temp1 = (255-temp1)
# do morphology to locate horizontal lines and invert
kernel_horizontal = cv2.getStructuringElement(cv2.MORPH_RECT, (50,1))
temp2 = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel_horizontal)
temp2 = (255-temp2)
# add the two temp images together
temp = cv2.add(temp1, temp2)
# add temp to img to create result
result = cv2.add(temp, img)
# write result to disk
cv2.imwrite("document_lines_removed.png", result)
# display it
cv2.imshow("temp1", temp1)
cv2.imshow("temp2", temp2)
cv2.imshow("temp", temp)
cv2.imshow("result", result)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |