gpt4 book ai didi

python - 使用 NumPy 屏蔽 QImage 的 alpha 值时出现意外结果

转载 作者:行者123 更新时间:2023-12-01 07:34:05 25 4
gpt4 key购买 nike

我需要使用 numpy 数组来屏蔽 QImage 上的 alpha 值。

我读过不同的方法,但没有一个非常有效。

我还尝试在列表上使用 for 循环来测试它是否是一个 numpy bug,但我得到了相同的结果。我不明白我在哪里犯了错误。

from PySide2.QtGui import QImage
from PySide2.QtCore import Qt
import numpy as np
import qimage2ndarray as q2np

contour = QImage()
contour.load("contour.png")
contour.convertTo(QImage.Format_Grayscale8)

np_cont = q2np.byte_view(contour)
np_cont = np_cont.reshape(np_cont.shape[:-1])

red = QImage(contour.size(), QImage.Format_ARGB32)
red.fill(Qt.red)

alpha = q2np.alpha_view(red)
alpha *= np_cont.astype(np.bool)

red.save("result.png")

输入轮廓:

contour.png

mask 生成的图像:

result.png

所需的结果应该与输入类似,请注意,除了附加曲线之外,线条更粗。

不知道程序哪里错了。

最佳答案

在 Python 中,除了 0 为“False”之外,所有数字都被视为“True”,因此当您将 bool 值转换为“alpha”时,如果 10 的像素在灰度中是黑色,则它会变为 1在 bool 值中是白色的,因此它会产生变化,因此使用 astype(np.bool) 转换为 bool 值不是最好的选择,而是建立一个更合适的阈值,例如 127:

from PySide2.QtGui import QImage
from PySide2.QtCore import Qt
import numpy as np
import qimage2ndarray as q2np

contour = QImage()
contour.load("contour.png")
contour.convertTo(QImage.Format_Grayscale8)
np_cont = q2np.byte_view(contour)
np_cont = np_cont.reshape(np_cont.shape[:-1])
red = QImage(contour.size(), QImage.Format_ARGB32)
red.fill(Qt.red)

alpha = q2np.alpha_view(red)
alpha *= np_cont > 127 # .astype(np.bool)
red.save("result.png")

输出:

enter image description here

关于python - 使用 NumPy 屏蔽 QImage 的 alpha 值时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57081478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com