警告:QT_DEVICE_PIXEL_RATIO已被弃用

10

我正在使用matplotlib与openCV一起绘制一些阈值方法,但会出现以下警告,且没有输出:

警告: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([])

1
使用 plt.show() 来展示一个 matplotlib 图形。 - ImportanceOfBeingErnest
谢谢@ImportanceOfBeingErnest。我还是个新手。你有关于这些警告的任何想法吗? - Saif
1
一种展示图像的替代方法是使用cv2.imshow()。例如,cv2.imshow('image', image[0]),然后跟随cv2.waitKey() - nathancy
1
关于这个警告,需要更多关于Python版本、Matplotlib、CV、PyQt以及运行系统的信息,同时还需要一个自包含的示例。 - ImportanceOfBeingErnest
6个回答

11

非常感谢大家的帮助。对我来说,只有Elyte的答案有效。在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...

5

我使用与@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

发现了这个解决方案!

    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

这些警告与底层的Qt库变更有关:

在Qt 5.4中,通过QT_DEVICE_PIXEL_RATIO环境变量引入了高DPI缩放的实验性实现,你可以将其设置为数值比例或自动。该变量已在Qt 5.6中弃用。(source

由于只是一个废弃警告,我不确定转换到较新选项是否能解决缺少输出窗口的问题。请参阅您问题下面的评论。

但是,要消除这些警告,启动脚本时应在shell中执行以下操作:

export QT_AUTO_SCREEN_SCALE_FACTOR=1;
python myscript.py;

详情请参考:Qt文档:高分辨率显示器


3

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


2

简单来说,你只需要在代码结尾处添加cv.waitkey(0)即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接