Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python放大图像(无外部库帮助)_Python_Numpy_Image Resizing - Fatal编程技术网

Python放大图像(无外部库帮助)

Python放大图像(无外部库帮助),python,numpy,image-resizing,Python,Numpy,Image Resizing,我试图将图像放大200%,但输出图像上方有一些奇怪的条形图。我想这和中心像素有关。我尝试在不使用诸如resize()之类的库函数的情况下执行此操作。作为参考,我尝试实现以下功能: import numpy as np img = cv2.imread('C:\\Users\\usama\\Downloads\\lena.tiff',0) # Open Image in grayscale origImg = np.asarray(img)

我试图将图像放大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)

将numpy导入为np
img=cv2.imread('C:\\Users\\usama\\Downloads\\lena.tiff',0)#以灰度打开图像
origImg=np.asarray(img)#将图像转换为二维阵列
upscaledImg=np.zeros((10241024))#用于放大图像的空数组
Rowled=0#原始图像行
rowNew=0#放大的图像行
colOld=0#原始图像列
colNew=0#放大的图像列
def pixeltop():
返回int(origImg[rowOld][colOld])/2+int(origImg[rowOld][colOld+1])/2
def pixelcenter():
return(int(origImg[rowlod+1][colOld])+int(origImg[rowlod+1][colOld+1])+int(origImg[rowlod+1][colOld])+int(origImg[rowlod][colOld+1])/5
def pixelleft():
返回int(origImg[rowOld][colOld])/2+int(origImg[rowOld+1][colOld])/2
def pixelright():
返回int(origImg[rowOld][colOld+1])/2+int(origImg[rowOld+1][colOld+1])/2
def pixelbooth():
返回int(origImg[rowOld+1][colOld])/2+int(origImg[rowOld+1][colOld+1])/2
而Rowled<(len(origImg)):#用于横穿行的外部循环
colOld=0
colNew=0
而colOld<(len(origImg)):#用于横穿列的内部循环
upscaledImg[rowNew][colNew]=origImg[rowled][colOld]
upscaledImg[rowNew][colNew+1]=pixeltop()
upscaledImg[rowNew][colNew+2]=origImg[rowled][colOld+1]
upscaledImg[rowNew+1][colNew]=pixelleft()
upscaledImg[rowNew+1][colNew+1]=像素中心()
upscaledImg[rowNew+1][colNew+2]=pixelright()
upscaledImg[rowNew+2][colNew]=原始[rowOld+1][colOld]
upscaledImg[rowNew+2][colNew+1]=像素底部()
upscaledImg[rowNew+2][colNew+2]=原始[rowOld+1][colOld+1]
colOld+=2
colNew+=4
如果(rowOld==511):
打破
罗尔德+=2
rowNew+=4
cv2.imwrite('upscaled.png',upscaledImg)
输出:


新图像是通过修改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窗口

新图像是通过修改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窗口

Ohhh对,我没有这样想过。刚刚实现了这个,现在已经解决了。谢谢。哦,对了,我没有那样想。刚刚实现了这个,现在已经解决了。谢谢