为了账号安全,请及时绑定邮箱和手机立即绑定

Python 升级图像(没有外部库帮助)

Python 升级图像(没有外部库帮助)

喵喵时光机 2022-07-12 16:03:31
我正在尝试将图像放大 200%,但输出图像上有一些奇怪的条。我认为它与中心像素有关。我正在尝试在没有诸如 resize() 之类的库函数的情况下做到这一点。作为参考,我正在尝试实现此功能:import numpy as npimg = cv2.imread('C:\\Users\\usama\\Downloads\\lena.tiff',0)             # Open Image in grayscaleorigImg = np.asarray(img)                   # Convert Image to 2D ArrayupscaledImg = np.zeros((1024,1024))         # Empty Array for upscaled ImagerowOld = 0            # Orignal Image RowrowNew = 0            # Upscaled Image RowcolOld = 0            # Original Image ColumncolNew = 0            # Upscaled Image Columndef pixeltop():    return int(origImg[rowOld][colOld]) / 2 + int(origImg[rowOld][colOld + 1]) / 2def pixelcenter():    return (int(origImg[rowOld+1][colOld]) + int(origImg[rowOld+1][colOld + 1]) + int(origImg[rowOld+1][colOld]) + int(origImg[rowOld][colOld + 1]))/5def pixelleft():    return int(origImg[rowOld][colOld]) / 2 + int(origImg[rowOld + 1][colOld]) / 2def pixelright():    return int(origImg[rowOld][colOld + 1]) / 2 + int(origImg[rowOld + 1][colOld + 1]) / 2def pixelbottom():    return int(origImg[rowOld + 1][colOld]) / 2 + int(origImg[rowOld + 1][colOld + 1]) / 2while 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 += 4cv2.imwrite('upscaled.png',upscaledImg)输出:
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

新图像是通过修改 3x3 像素的窗口构建的,但是您的窗口移动 4 像素 x 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 窗口


查看完整回答
反对 回复 2022-07-12
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号