使用 Cv2 放大图像?

Zoom Into Image With Cv2?

我以下面的图片为例:

529 x 550 像素 (100 %)

作为目标,我希望将图像放大到大约

150%,但应该还是

529 x 550 像素:

我可以使用 PIL 编写代码,但我想使用 Cv2。有人可以帮我吗?

from PIL import Image
import cv2 as cv

def zoom_at(img, x, y, zoom):
    w, h = img.size
    zoom2 = zoom * 2
    img = img.crop((x - w / zoom2, y - h / zoom2, 
                    x + w / zoom2, y + h / zoom2))
    return img.resize((w, h), Image.LANCZOS)

img = Image.open("image.png")

img = zoom_at(img, 264.5, 275, 1.5)

img = img.save('image_zoomed.png')

@Ofer Sadan

import cv2 as cv


def zoom(img, zoom_factor=1.5):
    return cv.resize(img, None, fx=zoom_factor, fy=zoom_factor)


img = cv.imread('original.png')
# Original: 529 × 550


height, width = img.shape[:2]


zoomed = zoom(img, 1.5)
# Zoomed: 794 × 825 


cropped = zoomed[0:550, 0:529] # Wrong area
# Now I want to crop the middle of the new image as variable.


cv.imwrite('zoomed.png', zoomed)
cv.imwrite('cropped.png', cropped)

我有一个我之前用过的小片段,我目前无法测试所以让我知道它是否真的有效

import cv2 as cv

def zoom(img, zoom_factor=2):
    return cv.resize(img, None, fx=zoom_factor, fy=zoom_factor)

您可以根据需要在缩放前或缩放后裁剪:

img = cv.imread(img_path)
cropped = img[200:300, 150:250]
zoomed = zoom(img, 3)
zoomed_and_cropped = zoom(cropped, 3)

对于不想手动计算的人来说,这对我有用。

import cv2

def zoom_center(img, zoom_factor=1.5):

    y_size = img.shape[0]
    x_size = img.shape[1]
    
    # define new boundaries
    x1 = int(0.5*x_size*(1-1/zoom_factor))
    x2 = int(x_size-0.5*x_size*(1-1/zoom_factor))
    y1 = int(0.5*y_size*(1-1/zoom_factor))
    y2 = int(y_size-0.5*y_size*(1-1/zoom_factor))

    # first crop image then scale
    img_cropped = img[y1:y2,x1:x2]
    return cv2.resize(img_cropped, None, fx=zoom_factor, fy=zoom_factor)

# read original 
img = cv2.imread('original.png')

# call our function
img_zoomed_and_cropped = zoom_center(img)

# write zoomed and cropped version
cv.imwrite('zoomed_and_cropped.png', img_zoomed_and_cropped)

注意我先裁剪然后重新缩放。它效率更高,您会在处理实时视频源时注意到它。