[英]How to resize image without adding noise with python?
我有一張圖片,我想在不破壞它的情況下調整和擴展這張圖片。
圖片:
圖片尺寸:
我希望它調整為的圖像大小:
我嘗試了所有已知的方法:
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")
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.resize
的resample
參數,則此過濾器是默認值
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.