33

我目前正在阅读图像并将其显示到窗口。我已经成功地做到了这一点,但是在显示图像时,窗口只允许我看到完整图像的一部分。我在加载后尝试保存图像,它保存了整个图像。所以我相当肯定它正在读取整个图像。

imgFile = cv.imread('1.jpg')

cv.imshow('dst_rt', imgFile)
cv.waitKey(0)
cv.destroyAllWindows()

图片: 图片

截屏: 截屏

4

3 回答 3

36

看起来图像太大,窗口根本不适合屏幕。使用标志创建窗口cv2.WINDOW_NORMAL,它将使其可扩展。然后您可以调整它的大小以适合您的屏幕,如下所示:

from __future__ import division
import cv2


img = cv2.imread('1.jpg')

screen_res = 1280, 720
scale_width = screen_res[0] / img.shape[1]
scale_height = screen_res[1] / img.shape[0]
scale = min(scale_width, scale_height)
window_width = int(img.shape[1] * scale)
window_height = int(img.shape[0] * scale)

cv2.namedWindow('dst_rt', cv2.WINDOW_NORMAL)
cv2.resizeWindow('dst_rt', window_width, window_height)

cv2.imshow('dst_rt', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

根据 OpenCV 文档 CV_WINDOW_KEEPRATIO标志应该做同样的事情,但它没有,它的值甚至没有出现在 python 模块中。

于 2013-10-17T01:39:18.207 回答
3

这可以帮助你

namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", image );                   // Show our image inside it.
于 2013-10-10T07:25:47.113 回答
1

在 openCV 中,每当您尝试显示超大图像或大于显示分辨率的图像时,您都会得到裁剪显示。这是一种默认行为。
为了在您选择的窗口中查看图像,openCV 鼓励使用命名窗口。请参考namedWindow 文档

namedWindow 函数创建一个窗口,可以用作图像和轨迹栏的占位符。创建的窗口由它们的名称引用。

cv.namedWindow(name, flags=CV_WINDOW_AUTOSIZE) 每个窗口都通过名称 arg 与图像容器相关,请确保使用相同的名称

例如:

import cv2
frame = cv2.imread('1.jpg')
cv2.namedWindow("Display 1")
cv2.resizeWindow("Display 1", 300, 300)
cv2.imshow("Display 1", frame)
于 2018-03-22T22:11:36.083 回答