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 实现类似的东西。
- 是否可以用 opencv 实现这样的布局
- 我是否应该寻找像 GTK 这样的 window 管理器来实现它?
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
以获得更多选项。
我目前正在使用 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 实现类似的东西。
- 是否可以用 opencv 实现这样的布局
- 我是否应该寻找像 GTK 这样的 window 管理器来实现它?
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
以获得更多选项。