2013-10-10 213 views
17

我目前正在阅读图像并将其显示到窗口。我已成功完成此操作,但在显示图像后,窗口仅允许我看到完整图像的一部分。我尝试加载后保存图像,并保存了整个图像。所以我相当肯定它正在读取整个图像。Python - OpenCV - imread - 显示图像

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

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

图片: image

截图: screenshot

+1

您正在使用旧版本(用于名为'cv2'的新模块)。尝试更新它。 – Igonato

+0

对不起,我忘记提及我正在使用cv2作为cv。 –

+0

这段代码看起来不错。你能告诉我们一个截图吗? – Igonato

回答

21

貌似图片太大,窗口根本不适合屏幕。 使用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() 

According to the OpenCV documentationCV_WINDOW_KEEPRATIO标志也应该这样做,但它没有,它甚至不是Python模块中提供价值。

+0

这工作出色!图像创建的很小,但我可以点击并拖动来放大窗口。谢谢! –

+0

使用浮点screen_res得到正确缩放的起始图像: 'screen_res = 1280.,720.' – Marc

+0

@Marc'from __future__ import division'查看 – Igonato

3

这可以帮助你

namedWindow("Display window", CV_WINDOW_AUTOSIZE);// Create a window for display. 
imshow("Display window", image);     // Show our image inside it.