【问题标题】:OpenCV display image in fullscreen on Mac without white borderOpenCV在Mac上全屏显示图像,没有白色边框
【发布时间】:2016-08-30 19:42:26
【问题描述】:

我在 Mac OSX 10.9 上运行 opencv 版本 3.1.0 和 python 2.7,并希望全屏显示黑色图像。我的屏幕分辨率是 2880x1800。

但是当我尝试这样做时,屏幕顶部有一个大的白色边框。

这是我的代码,注意 black.jpg 是 2880x1800 的图像。

import cv2

img = cv2.imread("black.jpg")

cv2.namedWindow("window", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("window",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
cv2.imshow("window", img)

while True:
    key = cv2.waitKey(20)
    #exit on ESC
    if key == 27:
        break

我还尝试使用以下代码手动创建黑色图像。

import cv2
import numpy as np

img = np.zeros((1800, 2880)) 
cv2.namedWindow("window", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("window", cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
cv2.imshow("window",img)
cv2.waitKey(0)

我已经调整了 numpy 数组的尺寸以使其更大,但边框仍然存在。

做了一些研究,我发现这可能是 opencv 的一个错误。但是,这些解决方案仅适用于 windows 操作系统,请参阅以下内容:

OpenCV window in fullscreen and without any borders

How to display an image in full screen borderless window in openCV

如果有人知道如何修复 Mac 的错误,我可以继续重建库。或者,如果我做错了什么,请告诉我。谢谢!

【问题讨论】:

    标签: python macos opencv opencv3.0 opencv3.1


    【解决方案1】:

    这些链接中的问题不是边框的存在,而是由于某种原因窗口的背景显示出来。据我了解,OpenCV 的 namedWindow 实际上创建了一个两个窗口,一个在另一个内部。 “白线”实际上是父窗口的灰色背景。你可能会在 OSX 中遇到同样的问题,因为 openCV 以这种方式创建窗口。

    我通过Windows API更改父窗口的背景颜色在windows中解决了这个问题,也许你可以在OSX中尝试类似的东西。

    【讨论】:

      【解决方案2】:

      我猜关键是要使图像大小适应真正的 macbook 屏幕分辨率。 1800x2880 可能不是您目前采用的那个。

      1. System Preferences -> Display -> Scaled找到你的macbook的显示分辨率
      2. 使用 OpenCV 编写代码

        import cv2
        
        def show_full_screen_image():
            while True:
                print 'loading images...'
                img = cv2.imread('preferred_image.png')
                # Note: 900x1440 is the resolution with my MBP
                img = cv2.resize(img, (1440, 900), interpolation=cv2.INTER_CUBIC)
                cv2.namedWindow("test", cv2.WND_PROP_FULLSCREEN)
                cv2.setWindowProperty("test", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
                cv2.imshow("test", img)
                key=cv2.waitKey(0)
                if key==27:    # ESC to exit
                    break
        
        if __name__ == '__main__':
            show_full_screen_image()
        

      【讨论】:

        猜你喜欢
        • 2011-09-24
        • 1970-01-01
        • 2015-06-09
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多