Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 2088

Line and Square removal using getStructuringElement and morphologyEx

$
0
0
I would like to remove horizontal and vertical lines from image contains text. My approach is to use `getStructuringElement` then pass it to `cv2.morphologyEx`. This Approach works fine when the `ksize` is correctly set. Here comes the problem how to get the correct `ksize` for specific image and set it dynamically. Here are two examples :
This image works fine when `ksize` is set to `(4,3)` cv2.getStructuringElement(cv2.MORPH_ELLIPSE , (4,3)) [![enter image description here][1]][1]

while another example :

works fine when `ksize` is set to `(5,4)`
[![enter image description here][2]][2] What is the equation controlling `ksize`. I checked out the [documentation][3] but not m Here the code used:
import numpy as np import cv2 gray = cv2.imread('top.png') edges = cv2.Canny(gray,50,150,apertureSize = 3) minLineLength=100 lines = cv2.HoughLinesP(image=edges,rho=1,theta=np.pi/180, threshold=100,lines=np.array([]), minLineLength=minLineLength,maxLineGap=80) a,b,c = lines.shape for i in range(a): x = lines[i][0][0] - lines [i][0][2] y = lines[i][0][1] - lines [i][0][3] if x!= 0: if abs(y/x) <1: cv2.line(gray, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (255, 255, 255), 1, cv2.LINE_AA) se = cv2.getStructuringElement(cv2.MORPH_ELLIPSE , (5,4)) gray = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, se) img = cv2.fastNlMeansDenoising(gray, None, 65, 5, 21) img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY_INV)[1] img = cv2.bitwise_not(img) k1 = np.zeros((3, 3), np.uint8) img = cv2.erode(img, k1, iterations = 1) [1]: https://i.stack.imgur.com/J3Blf.png [2]: https://i.stack.imgur.com/gtncA.png [3]: https://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html

Viewing all articles
Browse latest Browse all 2088

Trending Articles