关于cv2.imshow仅显示大图像局部内容的技术问询
为啥OpenCV的imshow只显示大图像的局部?这不是Bug!
这真不是OpenCV的Bug,是你对cv2.namedWindow()的参数理解不到位~
你用的cv2.WINDOW_AUTOSIZE会让窗口严格按照图像的原始尺寸来创建,但你的图像是2160×2880,基本肯定超过了你显示器的分辨率,窗口没法完整容纳这么大的图像,所以只能显示屏幕能装下的局部区域。而cv2.imwrite()是直接把完整的图像数据写入文件,所以用看图软件打开能看到全图,这完全是正常逻辑,不是问题。
给你几个实用的解决办法:
- 改用可调整大小的窗口:把窗口创建参数换成
cv2.WINDOW_NORMAL,这样窗口可以手动拖动调整大小,图像也会跟着缩放适配窗口:import cv2 # 换成WINDOW_NORMAL,支持窗口大小调整 cv2.namedWindow('image', cv2.WINDOW_NORMAL) img = cv2.imread("0.png") cv2.imshow("image", img) cv2.waitKey(0) cv2.imwrite("xxx.png", img) - 提前缩放图像:如果不想手动调窗口,可以在显示前用
cv2.resize()按比例缩小图像,比如缩到原来的一半:import cv2 img = cv2.imread("0.png") # 按0.5倍比例缩小,fx和fy是宽高缩放因子 scaled_img = cv2.resize(img, None, fx=0.5, fy=0.5) cv2.imshow("image", scaled_img) cv2.waitKey(0) - 小技巧(兼容性一般):部分OpenCV版本中,按住Ctrl键拖动窗口边缘也能强制缩放窗口,但这个不是所有环境都支持,还是前两种方法更靠谱。
内容的提问来源于stack exchange,提问作者scott huang
相关产品推荐
相关产品推荐

