我今天开始学习OpenCV,我编写了一个简短的代码来上传(不知道,如果合适的话)一个随机图像:
它工作正常,我可以打开图像,但是我得到的是一个大窗口,除非滚动,否则无法看到完整图像:
所以,我想知道一种方法,可以在较短的窗口中漂亮地看到整个图像。
答案 0 :(得分:0)
您可以调整图像的大小并保持高宽比不变并显示它。
#Display image
def display(img, frameName="OpenCV Image"):
h, w = img.shape[0:2]
neww = 800
newh = int(neww*(h/w))
img = cv2.resize(img, (neww, newh))
cv2.imshow(frameName, img)
cv2.waitKey(0)
答案 1 :(得分:0)
实际的“问题”来自imshow
本身,如下所示:
如果未在此功能之前创建窗口,则假定使用
cv::WINDOW_AUTOSIZE
创建一个窗口。
查看WindowFlags
文档页面上的相应描述,我们得到:
用户无法调整窗口大小,该大小受所显示图像的限制。
因此,要解决此问题,必须使用namedWindow
手动设置窗口,然后使用resizeWindow
相应地调整窗口大小。
让我们看看下面的代码片段:
import cv2
# Read image
image = cv2.imread('path/to/your/image.png')
# Window from plain imshow() command
cv2.imshow('Window from plain imshow()', image)
# Custom window
cv2.namedWindow('custom window', cv2.WINDOW_KEEPRATIO)
cv2.imshow('custom window', image)
cv2.resizeWindow('custom window', 200, 200)
cv2.waitKey(0)
cv2.destroyAllWindows()
示例输出如下所示(原始图像尺寸为[400, 400]
):
使用cv2.WINDOW_KEEPRATIO
,图像始终适合窗口,并且您可以根据需要手动调整窗口大小。
希望有帮助!