Python - OpenCV - imread - 显示图像

33

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

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

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

图片: image

截图: screenshot


2
您正在使用旧版本(Python模块的新版本名为cv2)。请尝试更新它。 - Igonato
抱歉,我忘了提到我正在使用cv2作为cv。 - Sinjin Forde
这段代码看起来不错。你能给我们展示一下截图吗? - Igonato
请提供更多上下文,这些图片无法独立翻译。 - Sinjin Forde
它不允许我将图片添加到我的问题中,但这里有原始图片和结果截图的链接。 - Sinjin Forde
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模块中也没有呈现其值。


使用浮点型的screen_res来获取正确缩放的起始图像: screen_res = 1280.,720. - Marc
@Marc from __future__ import division 查一下就知道了。 - Igonato
cv2.imshow('dst_rt', img)之前,我需要添加cv2.resize(img, (window_width, window_height)) - Rohit

3

这可以帮助你

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

是不是应该用WINDOW_AUTOSIZE而不是CV_WINDOW_AUTOSIZE? - demongolem

1

在openCV中,当您尝试显示一个超过屏幕分辨率或大于屏幕的图像时,会得到裁剪后的显示。这是默认行为。
为了在所选窗口中查看图像,openCV鼓励使用命名窗口。请参阅namedWindow documentation

函数namedWindow创建一个窗口,可用作图像和trackbar的占位符。通过名称引用创建的窗口。

cv.namedWindow(name, flags=CV_WINDOW_AUTOSIZE) 其中每个窗口都由名称参数与图像容器相关联,请确保使用相同的名称

例如:

import cv2
frame = cv2.imread('1.jpg')
cv2.namedWindow("Display 1")
cv2.resizeWindow("Display 1", 300, 300)
cv2.imshow("Display 1", frame)

如果你会显式调用resizeWindow(),那么使用CV_WINDOW_AUTOSIZE有意义吗? - WestCoastProjects
@javadba,你说得对,当我们显式调用resizeWindow()时,不建议使用CV_WINDOW_AUTOSIZE。感谢你的指出! - Mahesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接