Выпрямление волнистого изображения по краям

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

Выпрямление волнистого изображения по краям

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

Желаемый результат должен выглядеть примерно так:

Выпрямление волнистого изображения по краям

Можете ли вы помочь мне архивировать это?

что вы имеете в виду под исправленным?

Vasu Deo.S 03.07.2019 10:04

Можете ли вы показать желаемый результат для изображения выше?

Agnius Vasiliauskas 03.07.2019 10:04

Добавлен желаемый результат для преобразования.

reencode 03.07.2019 10:53
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
3
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это так...

  • Откройте входное изображение, сделайте оттенки серого и порог в массив Numpy
  • Сделайте выходное изображение того же размера, что и входное, но полностью черным
  • Итерируйте столбцы изображения, находя первый и последний белый пиксель в каждом столбце. Скопируйте этот столбец пикселей, чтобы вывести изображение с центром на горизонтальной осевой линии.
  • Сохранить результат

#!/usr/bin/env python3

from PIL import Image
import numpy as np

# Open wavy image and make greyscale
i = Image.open('wavy.jpg').convert('L')

# Make Numpy version of input image and threshold at 128
i = np.array(i)
i = np.where(i>128, np.uint8(255), np.uint8(0)) 

# Make Numpy version of output image - all black initially
o = np.zeros_like(i)

h, w = i.shape

# Process each column, copying white pixels from input image
# ... to output image centred on horizontal centreline
centre = h//2
for col in range(w):
    # Find top and bottom white pixel in this column
    whites = np.nonzero(i[:,col])
    top = whites[0][0]    # top white pixel
    bot = whites[0][-1]   # bottom white pixel
    thk = bot - top       # thickness of sandwich filling
    # Copy those pixels to output image
    startrow = centre - thk//2
    o[startrow:startrow+thk,col] = i[top:bot,col]

Image.fromarray(o).save('result.png')

Спасибо, что решили мою проблему :) Можете ли вы сказать мне, почему вы использовали двойную косую черту?

reencode 05.07.2019 08:52

Двойная косая черта дает вам целочисленное деление, поэтому в ответе нет дробной части, что плохо для индексации массивов ;-)

Mark Setchell 05.07.2019 10:22

Другие вопросы по теме