एक छवि में क्षैतिज रेखाओं को हटाने के लिए, हम निम्नलिखित कदम उठा सकते हैं -
- स्थानीय चित्र पढ़ें।
- इमेज को एक कलर स्पेस से दूसरे कलर स्पेस में बदलें।
- प्रत्येक सरणी तत्व के लिए एक निश्चित-स्तरीय सीमा लागू करें।
- रूपात्मक संचालन के लिए निर्दिष्ट आकार और आकार का एक संरचनात्मक तत्व प्राप्त करें।
- उन्नत रूपात्मक परिवर्तन करें।
- बाइनरी इमेज में कंटूर ढूंढें.
- चरण 4 को विभिन्न कर्नेल आकार के साथ दोहराएं।
- चरण 7 से नए कर्नेल के साथ चरण 5 को दोहराएं।
- परिणामी छवि दिखाएं।
उदाहरण
import cv2
image = cv2.imread('input_image.png')
cv2.imshow('source_image', image)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 1))
detected_lines = cv2.morphologyEx(thresh, cv2.MORPH_OPEN,
horizontal_kernel, iterations=2)
cnts = cv2.findContours(detected_lines, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
cv2.drawContours(image, [c], -1, (255, 255, 255), 2)
repair_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 6))
result = 255 - cv2.morphologyEx(255 - image, cv2.MORPH_CLOSE, repair_kernel,
iterations=1)
cv2.imshow('resultant image', result)
cv2.waitKey()
cv2.destroyAllWindows() आउटपुट

ध्यान दें कि हमारे source_image में क्षैतिज रेखाएं अब resultant_image में दिखाई नहीं देती हैं।