我有这张图片:raw
我想从该图像中删除方括号。我到目前为止:
# Import packages
import cv2
import numpy as np
#Create MSER object
mser = cv2.MSER_create()
#Your image path i-e receipt path
img = cv2.imread('uky.JPG')
#Convert to gray scale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
vis = img.copy()
#detect regions in gray scale image
regions, _ = mser.detectRegions(gray)
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions]
cv2.polylines(vis, hulls, 1, (0, 255, 0))
cv2_imshow(vis)
mask = np.zeros((img.shape[0], img.shape[1], 1), dtype=np.uint8)
for contour in hulls:
cv2.drawContours(mask, [contour], -1, (255, 255, 255), -1)
#this is used to find only text regions, remaining are ignored
text_only = cv2.bitwise_and(img, img, mask=mask)
cv2_imshow(text_only)
此代码的结果:detected预期输出:expected
但我不知道如何删除方括号。我敢肯定这是一个非常简单的问题,但是由于我对OpenCV不熟悉,所以我无法在数小时内解决这个问题。
如果有人可以向我解释这一点,我将非常高兴。提前非常感谢您。
最佳答案
这是Python / OpenCV中的一种方法。获取轮廓并过滤长宽比和面积。将其余轮廓绘制为白色背景上的黑色。
输入:
import cv2
import numpy as np
#Read input image
img = cv2.imread('brackets.jpg')
# threshold on black
lower =(0,0,0)
upper = (50,50,50)
thresh = cv2.inRange(img, lower, upper)
# find contours and get one with area about 180*35
contours = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]
# filter contours on aspect ratio and area
max_aspect = 3.7
min_aspect = 0.7
min_area = 15
result = np.full_like(img, (255,255,255))
for cntr in contours:
area = cv2.contourArea(cntr)
x,y,w,h = cv2.boundingRect(cntr)
aspect = h/w
if aspect > min_aspect and aspect < max_aspect and area > min_area:
cv2.drawContours(result, [cntr], -1, (0, 0, 0), 2)
# save result
cv2.imwrite("brackets_thresh.jpg", thresh)
cv2.imwrite("brackets_removed.jpg", result)
# show images
cv2.imshow("THRESH", thresh)
cv2.imshow("RESULT", result)
cv2.waitKey(0)
阈值图片:
结果: