Python - OpenCV - imread - 显示图像

Posted

技术标签:

【中文标题】Python - OpenCV - imread - 显示图像【英文标题】:Python - OpenCV - imread - Displaying Image 【发布时间】:2013-10-17 14:39:34 【问题描述】:

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

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

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

图片:

截图:

【问题讨论】:

您使用的是旧版本(python 模块用于名为cv2 的新版本)。尝试更新它。 对不起,我忘了说我使用的是cv2作为cv。 这段代码看起来不错。可以给我们截图吗? i.stack.imgur.com/ug90J.jpgi.stack.imgur.com/qsJuF.jpg 它不允许我将图像添加到我的问题中,但这里是原始图像的链接和结果的屏幕截图。 【参考方案1】:

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

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)

【讨论】:

如果你显式调用resizeWindow(),那么拥有CV_WINDOW_AUTOSIZE 是否有意义? @javadba 你的权利,当我们明确调用 resizeWindow() 时,不建议使用 CV_WINDOW_AUTOSIZE 感谢您的理解!【参考方案2】:

看起来图像太大,窗口根本不适合屏幕。 使用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 模块中。

【讨论】:

使用浮点 screen_res 获得正确缩放的起始图像:screen_res = 1280., 720. @Marc from __future__ import division 查一下 我需要在cv2.imshow('dst_rt', img)之前添加cv2.resize(img, (window_width, window_height)) 【参考方案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吗?

以上是关于Python - OpenCV - imread - 显示图像的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV-Python中的函数cv.imread()读取到的图像的数据存储结构是怎样的?

Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()

python,opencv,imread,imwrite,存储,读取图像像素不一致,这种情况是label使用jpg格式

Python下的OpenCV学习 02 —— 图像的读取与输出

python-opencv读取显示写入图像

python-opencv读取显示写入图像