如何用OpenCV实现图像150%缩放且保持原529×550像素尺寸
修正后的OpenCV实现代码
import cv2 as cv def zoom_at(img, x, y, zoom): # img为cv读取的BGR格式图像,x、y是放大中心点坐标,zoom为放大倍数 height, width = img.shape[:2] # 按指定倍数放大图像,用INTER_LANCZOS4插值和PIL的LANCZOS效果对齐,减少画质损失 zoomed = cv.resize(img, None, fx=zoom, fy=zoom, interpolation=cv.INTER_LANCZOS4) zoomed_h, zoomed_w = zoomed.shape[:2] # 计算裁剪区域的边界坐标 crop_x1 = int(round(x * zoom - width / 2)) crop_y1 = int(round(y * zoom - height / 2)) crop_x2 = crop_x1 + width crop_y2 = crop_y1 + height # 执行中心裁剪,注意cv图像索引是先高后宽(y在前x在后) cropped = zoomed[crop_y1:crop_y2, crop_x1:crop_x2] return cropped # 调用示例 if __name__ == '__main__': img = cv.imread('original.png') height, width = img.shape[:2] # 取图像中心点作为放大中心,和原PIL代码逻辑一致 result = zoom_at(img, width/2, height/2, 1.5) cv.imwrite('image_zoomed.png', result)
关键修改说明
你之前的代码问题是裁剪默认从左上角(0,0)开始,只保留了放大后图像的左上角区域。上述代码和你的PIL版本逻辑完全对齐:先整体放大图像,再以指定中心点为核心,裁剪出和原图像尺寸一致的区域,最终实现中心放大、输出尺寸不变的效果。如果需要调整放大的中心位置,只需修改zoom_at调用时传入的x、y参数即可。
内容的提问来源于stack exchange,提问作者user16755372
相关产品推荐
相关产品推荐

