簡體   English   中英

如何在不使用python添加噪音的情況下調整圖像大小?

[英]How to resize image without adding noise with python?

我有一張圖片,我想在不破壞它的情況下調整和擴展這張圖片。

圖片:

形象作品

圖片尺寸:

  • w=41
  • h=43

我希望它調整為的圖像大小:

  • w=2000x
  • 小時=2100

我嘗試了所有已知的方法:

  1. 與 PIL.Image:
     from PIL import Image path = "image.png" w, h = 2000, 2100 img = Image.open(path) img = img.resize((w, h), Image.ANTIALIAS) img.save("re_image.png", "PNG")
  2. 使用 cv2:
     import cv2 path = "image.png" w, h = 2000, 2100 img = cv2.imread(path) img = cv2.resize(img, (w, h), interpolation = cv2.INTER_AREA) cv2.imwrite("re_image.png", img)

結果是:

結果圖片

不要使用ANTIALIAS過濾器。 由於您想保留邊緣的清晰度,只需使用NEAREST過濾器即可。 如果沒有參數傳遞給Image.resizeresample參數,則此過濾器是默認值

img = img.resize((w, h))

這給出了預期的結果

預期結果

對於您的二進制圖像的特定情況,我認為您希望保持邊緣清晰。 然后我建議在你的 openCV 實現中使用標志 cv2.INTER_NEAREST 。 您可以檢查文檔中給出的不同插值類型的效果: https : //docs.opencv.org/4.1.1/da/d54/group__imgproc__transform.html

我希望這有幫助!

我創建了一個簡單的函數。 請給我你的意見。

功能是:

 import cv2, numpy as np

 def resize(path, sizes = (500, 800)):
         nw, nh = sizes
         g_img = cv2.imread(path)

         gw, gh = g_img.shape[0], g_img.shape[1]
         nw, nh = gw+510, gh+510
         pw, ph = int(nw/gw), int(nh/gh)
         if (pw == 0):pw = 1
         if (ph == 0):ph = 1
         nw, nh = pw*gw, ph*gh

         cvimg = np.zeros((nh,nw,3), np.uint8)

         for gy in range(gh):
             y, h = gy*ph, (gy*ph)+ph
             for gx in range(gw):
                 x, w = gx*pw, (gx*pw)+pw
                 cvimg[y:h, x:w] = g_img[gy:gy+1, gx:gx+1]

         nsize = [nw, nh]
         return cvimg, nsize

結果是:

結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM