【问题标题】:Opencv - Center image into windowOpencv - 将图像居中到窗口中
【发布时间】:2021-01-18 14:23:58
【问题描述】:

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

我的目标是在其中心有一个包含加载图像的全屏窗口。

我可以将窗口设置为全屏并显示图像。 我还可以实现一些基本的绘图,并允许使用鼠标监听器放大/缩小图像。

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

这里是窗口部分的示例代码

#!/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("stackoverflow.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 做得很好,它甚至可以根据窗口大小调整打印图像的大小。

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

  • 是否可以用 opencv 实现这样的布局
  • 是否应该寻找像 GTK 这样的窗口管理器来实现它?

【问题讨论】:

  • 我的猜测是 OpenCV 会填充图像,因为您的图像小于窗口。如果我是你,我会先按比例(例如 1.5)调整图像的大小,使纵横比保持不变,然后自己填充其余部分,使其在窗口居中。

标签: python-3.x opencv opencv-python


【解决方案1】:
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 以获得更多选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-22
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多