Python масштабирование изображения (без помощи внешней библиотеки) - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь увеличить изображение на 200%, но на выходном изображении есть несколько странных полос. Я полагаю, это как-то связано с центральным пикселем. Я пытаюсь сделать это без библиотечных функций, таких как resize (). Для справки, я пытаюсь реализовать эту функцию:

import numpy as np

img = cv2.imread('C:\\Users\\usama\\Downloads\\lena.tiff',0)             # Open Image in grayscale
origImg = np.asarray(img)                   # Convert Image to 2D Array
upscaledImg = np.zeros((1024,1024))         # Empty Array for upscaled Image

rowOld = 0            # Orignal Image Row
rowNew = 0            # Upscaled Image Row
colOld = 0            # Original Image Column
colNew = 0            # Upscaled Image Column

def pixeltop():
    return int(origImg[rowOld][colOld]) / 2 + int(origImg[rowOld][colOld + 1]) / 2

def pixelcenter():
    return (int(origImg[rowOld+1][colOld]) + int(origImg[rowOld+1][colOld + 1]) + int(origImg[rowOld+1][colOld]) + int(origImg[rowOld][colOld + 1]))/5

def pixelleft():
    return int(origImg[rowOld][colOld]) / 2 + int(origImg[rowOld + 1][colOld]) / 2

def pixelright():
    return int(origImg[rowOld][colOld + 1]) / 2 + int(origImg[rowOld + 1][colOld + 1]) / 2

def pixelbottom():
    return int(origImg[rowOld + 1][colOld]) / 2 + int(origImg[rowOld + 1][colOld + 1]) / 2

while rowOld < (len(origImg)):                # Outer Loop for transversing rows
  colOld = 0
  colNew = 0
  while colOld < (len(origImg)):              # Inner Loop for transversing columns
    upscaledImg[rowNew][colNew] = origImg[rowOld][colOld]
    upscaledImg[rowNew][colNew+1] = pixeltop()
    upscaledImg[rowNew][colNew+2] = origImg[rowOld][colOld+1]
    upscaledImg[rowNew+1][colNew] = pixelleft()
    upscaledImg[rowNew+1][colNew+1] = pixelcenter()
    upscaledImg[rowNew+1][colNew+2] = pixelright()
    upscaledImg[rowNew+2][colNew] = origImg[rowOld+1][colOld]
    upscaledImg[rowNew+2][colNew+1] = pixelbottom()
    upscaledImg[rowNew+2][colNew+2] = origImg[rowOld+1][colOld+1]
    colOld +=2
    colNew +=4

    if(rowOld == 511):
      break
  rowOld += 2
  rowNew += 4

cv2.imwrite('upscaled.png',upscaledImg)

Вывод:

1 Ответ

0 голосов
/ 28 января 2020

новое изображение создается путем изменения windows 3x3 пикселей, но ваше окно перемещается 4 на 4 пикселя, оставляя зазор в один пиксель, отсюда и черные полосы.

пример, просто фокусирующийся на строке:

мы начинаем с rownew = 0

-> Img [0] установлен

-> Img [0+ 1] установлено

-> установлено значение img [0 + 2]

теперь rownew + = 4

-> установлено значение Img [4 + 0]

-> Img [4 + 1] установлено

-> Img [4 + 2] установлено

, оставляя Img [3] пустым

Вы можете изменить заполнение вашего окна должно быть 3 или реализовать назначения для окна 4x4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...