Я сделал это в командной строке с помощью ImageMagick , но вы можете сделать то же самое в Python с помощью wand , который основан на ImageMagick или с OpenCV с использованием сопоставления с шаблоном.
В основном форма, которую вы ищете, составляет 7x106 пикселей. Итак, я сделал черную полосу именно такой формы и попросил ImageMagick поискать на копии вашего изображения в оттенках серого лучшее место, которое наиболее близко соответствует такой solid черной полосе:
Сделать черную полосу:
magick -size 7x106 xc:black png8:bar.png
Сделать изображение в оттенках серого:
magick stripes.png -colorspace gray gstripe.png
Искать лучшую черную полосу на изображении:
magick compare -dissimilarity-threshold 1 -metric RMSE -subimage-search gstripe.png bar.png r.png
24655.4 (0.376218) @ 33,29
Это дает следующий результат:
The 33,29
tells me the top-left of the bar. So, I now draw a white rectangle there to hide the first bar and seek the second:
magick gstripe.png -fill white -draw "rectangle 33,29 40,135" gstripe2.png
magick compare -dissimilarity-threshold 1 -metric RMSE -subimage-search gstripe2.png bar.png r.png
30287.3 (0.462155) @ 162,32
And that tells me the second bar is at coordinates 162,32
:
Another method is to use Numpy to calculate the mean of all the columns in your image and then look for the dark areas:
columnMeans = np.mean(im, axis=0)
введите описание изображения здесь