Opencv - 将图像居中 window

Opencv - Center image into window

我目前正在使用 opencv-python 创建具有绘图可能性的图像查看器。

我的目标是全屏 window 包含位于其中心的加载图像。

我可以将 window 设置为全屏并显示图像。 我还可以实现一些基本绘图并允许使用鼠标侦听器缩放图像 in/out。

但是我找不到将图像居中显示的方法 window。

这里是window部分的示例代码

#!/usr/bin/python3

import cv2

# Set screen resolution
resolution = (1920, 1080)

# Create window
cv2.namedWindow('Output')
cv2.resizeWindow("Output", resolution[0], resolution[1])

# Read and show image
inputImage = cv2.imread("Whosebug.png")
cv2.imshow('Output', inputImage)

# Wait for keyboard input
chr = -1
while 0 < cv2.getWindowProperty("Output", cv2.WND_PROP_AUTOSIZE):
    chr = cv2.waitKey(100)

结果:

Matplotlib 做得很好,它甚至可以根据 window 大小调整打印图像的大小。

我想使用 opencv 实现类似的东西。

import numpy as np
import cv2


img = cv2.imread("./car-top-view.png")

w,h,c = img.shape

# Set screen resolution
resolution = (1920, 1080)

# Create window
cv2.namedWindow("Output")
cv2.resizeWindow("Output", resolution[0], resolution[1])

new_w = int(w*1.5)
new_h = int(h*1.5)

img = cv2.resize(img, (new_w, new_h))

img = cv2.copyMakeBorder( img, int((1080-new_h)/2), int((1080-new_h)/2), int((1920-new_w)/2), int((1920-new_h)/2), 0)


cv2.imshow("Output",img)

if cv2.waitKey(0) == ord('q'):
    cv2.destroyAllWindows()

这应该会产生所需的输出。在这种情况下,它使用自定义系数 (1.5) 重新缩放图像以保持纵横比。然后用 0 填充图像,使其保持在屏幕中间。查看 cv2.copyMakeBorder 以获得更多选项。