Как обнаружить пробелы в изображении в opencv Python?

У меня есть изображение:

input.png

Я должен обнаружить пробел между ними и в основном разделить его на две части следующим образом:

expected_output.png

Это то, что я закодировал до сих пор... но он обнаруживает только черные линии, а не среднюю белую область.

import numpy as np
import cv2

img = cv2.imread('12.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
median = cv2.medianBlur(gray,5)
minLineLength = 250
maxLineGap = 100
lines = cv2.HoughLinesP(edges,0.3,np.pi/180,250,minLineLength,maxLineGap)
for line in lines:
    x1,y1,x2,y2 =line[0]
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)

cv2.imwrite('newwhite.png',img)

person Sebanti    schedule 05.07.2020    source источник
comment
Посмотрите здесь... stackoverflow.com/a/42178147/2836621 и здесь... stackoverflow.com/a/61077264/2836621   -  person Mark Setchell    schedule 05.07.2020


Ответы (1)


У меня есть простое решение, основанное на средних значениях вдоль оси. Я предпочитаю scikit-image вместо opencv, но вы можете использовать cv2.

import matplotlib.pyplot
import numpy as np
import skimage.io
import skimage.color
import skimage.morphology
import scipy.signal

img = skimage.io.imread('12.png')
gray = skimage.color.rgb2gray(img)

# Create some large dark area with the text, 10 is quite big!
eroded = skimage.morphology.erosion(gray, skimage.morphology.square(5))

# Compute mean values along axis 0 or 1
hist = np.mean(eroded, axis=0)

# Search large (here 3% of dimension size) and distant (here 20% of dimension size) peaks
scipy.signal.find_peaks(hist, width=len(hist)*3//100, distance=len(hist)*20//100)

Затем каждый пик представляет собой белую линию в одном измерении вашего изображения.

person Mathia Haure-Touzé    schedule 05.07.2020