【发布时间】:2021-06-02 20:46:57
【问题描述】:
我在查找表格中特定列的轮廓时遇到问题。使用 opencv 时的问题是,我必须指定在 x、y 和 w(2 个轴和宽度)上使用 if 循环绘制矩形的区域,如果表格线完全水平或垂直,但如果它们'不是那么你就不会得到好的结果。
我使用这段代码来获取边界框:
import numpy as np
import cv2
img = r'C:\Users\lenovo\PycharmProjects\SoftOCR_Final\Filtered_images\filtered_image1.png'
table_image_contour = cv2.imread(img, 0)
table_image = cv2.imread(img)
ret, thresh_value = cv2.threshold(table_image_contour, 180, 255, cv2.THRESH_BINARY_INV)
kernel = np.ones((5, 5), np.uint8)
dilated_value = cv2.dilate(thresh_value, kernel, iterations=1)
contours, hierarchy = cv2.findContours(dilated_value, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
x, y, w, h = cv2.boundingRect(cnt)
# bounding the
if 2271 > x > 746 and w > 300 and y > 1285:
table_image = cv2.rectangle(table_image, (x, y), (x + w, y + h), (0, 0, 255), 3)
roi = table_image[y: y + h, x: x + w]
width = int(table_image.shape[1] * 20 / 100)
height = int(table_image.shape[1] * 20 / 100)
dsize = (width, height)
table_image = cv2.resize(table_image, dsize)
cv2.imshow('1', table_image)
cv2.waitKeyEx(0)
这是我正在处理的图像:
这就是我想画边界框的地方。只有那部分
现在这就是我真正得到的。
如您所见,我丢失了一些线条并在表格之外获得了边界框。
【问题讨论】:
-
你搜索过问题吗?你得到了什么?
-
我一直试图让它工作大约一个月,但它对我来说并不奏效。那里的大多数内容要么用于野外图像,您实际上不必使用对我有用的东西进行过滤,要么它位于完全水平/垂直的表格上,仅按位置过滤就足以获得完美的结果。
-
我觉得调整 if 块中的 x 和 y 范围应该足以解决问题。这会回答这个问题,还是我在这里遗漏了什么?
-
@Seon Idk 如果可以,因为当前的 if 语句也涵盖了该范围,因此没有理由这样做
标签: python opencv computer-vision