我目前正在阅读一张图片并将其显示到窗口中。 我已经成功完成了这个任务,但在显示图片时,窗口只允许我看到部分完整的图片。 我尝试保存加载后的图像,它保存了整个图像。 所以我相当确定它正在读取整个图像。
imgFile = cv.imread('1.jpg')
cv.imshow('dst_rt', imgFile)
cv.waitKey(0)
cv.destroyAllWindows()
图片:
截图:
看起来图片太大了,窗口根本不适合屏幕。
使用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 = 1280.,720.
- Marcfrom __future__ import division
查一下就知道了。 - Igonatocv2.imshow('dst_rt', img)
之前,我需要添加cv2.resize(img, (window_width, window_height))
。 - Rohit这可以帮助你
namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", image ); // Show our image inside it.
在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
有意义吗? - WestCoastProjectsresizeWindow()
时,不建议使用CV_WINDOW_AUTOSIZE
。感谢你的指出! - Mahesh
cv2
)。请尝试更新它。 - Igonato