Python放大图像(无外部库帮助)
我试图将图像放大200%,但输出图像上方有一些奇怪的条形图。我想这和中心像素有关。我尝试在不使用诸如resize()之类的库函数的情况下执行此操作。作为参考,我尝试实现以下功能: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)
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对,我没有这样想过。刚刚实现了这个,现在已经解决了。谢谢。哦,对了,我没有那样想。刚刚实现了这个,现在已经解决了。谢谢