【问题标题】:Warning: QT_DEVICE_PIXEL_RATIO is deprecated警告:不推荐使用 QT_DEVICE_PIXEL_RATIO
【发布时间】:2020-01-31 07:17:48
【问题描述】:

我在 openCV 旁边使用 matplotlib 来绘制一些阈值方法,并抛出以下没有输出的警告:

警告:QT_DEVICE_PIXEL_RATIO 已弃用。改为使用:
QT_AUTO_SCREEN_SCALE_FACTOR 启用平台插件控制 每个屏幕的因素。 QT_SCREEN_SCALE_FACTORS 设置每个屏幕 因素。 QT_SCALE_FACTOR 设置应用程序全局比例 因素。

我使用的是 Ubuntu 19.04

import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('gradient.jpg', 0)

_, th1 = cv.threshold(img, 50, 255, cv.THRESH_BINARY)
_, th2 = cv.threshold(img, 200, 255, cv.THRESH_BINARY_INV)
_, th3 = cv.threshold(img, 200, 255, cv.THRESH_TRUNC)
_, th4 = cv.threshold(img, 127, 255, cv.THRESH_TOZERO)
_, th5 = cv.threshold(img, 127, 255, cv.THRESH_TOZERO_INV)

titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, th1, th2, th3, th4, th5]

for i in range(6):
    plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])

【问题讨论】:

  • 使用plt.show() 显示一个matplotlib图。
  • 感谢@ImportanceOfBeingErnest。我还是菜鸟。对警告有任何想法吗?
  • 另一种显示图像的方法是使用cv2.imshow()。例如,cv2.imshow('image', image[0]) 后跟 cv2.waitKey()
  • 关于警告,您需要了解有关 python、matplotlib、cv、pyqt 的版本以及您运行它的系统的更多信息,以及一个独立的示例。

标签: python python-3.x qt opencv matplotlib


【解决方案1】:

谢谢大家。对我来说,只有Elyte's answer 成功了。要在 python 中使用它,您可以使用:

from os import environ

def suppress_qt_warnings():
    environ["QT_DEVICE_PIXEL_RATIO"] = "0"
    environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
    environ["QT_SCREEN_SCALE_FACTORS"] = "1"
    environ["QT_SCALE_FACTOR"] = "1"

if __name__ == "__main__":
    suppress_qt_warnings()
    
    # Init QT etc...

【讨论】:

    【解决方案2】:

    警告是关于底层 Qt 库的变化:

    在 Qt 5.4 中,通过 QT_DEVICE_PIXEL_RATIO 环境变量引入了高 DPI 缩放的实验性实现,您可以将其设置为数字缩放因子或自动。此变量在 Qt 5.6 中已弃用。 (source)

    由于它只是一个弃用,我不确定切换到较新的选项会解决丢失输出窗口的问题。请参阅您在问题下得到的 cmets。

    但要摆脱警告,这应该在启动脚本时在 shell 中工作:

    export QT_AUTO_SCREEN_SCALE_FACTOR=1;
    python myscript.py;
    

    详情请见:Qt Documentation: High DPI Displays

    【讨论】:

      【解决方案3】:

      我使用与@elyte5star 相同的方法解决了这个问题。 在运行程序之前,在终端中运行以下命令:

      export QT_DEVICE_PIXEL_RATIO=0
      export QT_AUTO_SCREEN_SCALE_FACTOR=1
      export QT_SCREEN_SCALE_FACTORS=1
      export QT_SCALE_FACTOR=1
      

      【讨论】:

        【解决方案4】:

        我在从 anaconda 提示符打开 spyder 时也遇到了这个问题。我通过删除 QT_DEVICE_PIXEL_RATIO 环境和系统变量解决了这个问题,并重新启动了 anaconda 提示符。

        【讨论】:

          【解决方案5】:

          遇到了这个解决方案!

              export QT_DEVICE_PIXEL_RATIO=0
              export QT_AUTO_SCREEN_SCALE_FACTOR=1
              export QT_SCREEN_SCALE_FACTORS=1
              export QT_SCALE_FACTOR=1
          

          【讨论】:

            【解决方案6】:

            您只需在代码末尾添加 cv.waitkey(0)

            【讨论】:

              猜你喜欢
              • 2020-05-14
              • 1970-01-01
              • 2020-02-23
              • 2019-09-21
              • 2016-09-19
              • 1970-01-01
              • 2015-02-26
              • 2017-03-01
              • 1970-01-01
              相关资源
              最近更新 更多