Как на PyQt5 убрать фон картинки

Подскажите, пожалуйста, как на PyQt5 убрать белый фон картинки. Например есть картинка jpg Исходник

Нужно получить, то же но без белого фона в формате png введите сюда описание изображения


Ответы (3 шт):

Автор решения: Konstantin
import sys
from PySide2.QtWidgets import (QWidget, QHBoxLayout,
                               QLabel, QApplication, QMessageBox)
from PySide2.QtGui import QPixmap, QColor, QImage
import traceback


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout(self)
        pixmap = QPixmap("cat.jpg")
        image = pixmap.toImage()
        image = image.convertToFormat(QImage.Format_ARGB32)
        for y in range(0, image.height() + 1):
            for x in range(0, image.width() + 1):
                print(image.pixelColor(x, y).getRgbF())
                if image.pixelColor(x, y).getRgbF() == (1.0, 1.0, 1.0, 1.0):
                    image.setPixelColor(x, y, QColor(0, 0, 0, 0))

        pixmap = QPixmap.fromImage(image)

        lbl = QLabel(self)
        lbl.setPixmap(pixmap)

        hbox.addWidget(lbl)
        self.setLayout(hbox)

        self.move(300, 200)
        self.setWindowTitle('Red Rock')
        self.show()


def log_uncaught_exceptions(ex_cls, ex, tb):
    # pyqt визуализация ошибок
    text = '{}: {}:\n'.format(ex_cls.__name__, ex)
    text += ''.join(traceback.format_tb(tb))
    print(text)
    QMessageBox.critical(None, 'Error', text)
    sys.exit()


sys.excepthook = log_uncaught_exceptions
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = Example()
    app.exec_()

Где-то примерно так =) Спасибо, gil9red!

→ Ссылка
Автор решения: gil9red

В итоге сделал используя createHeuristicMask, но это вышло больше из-за метода тыка, пока с масками игрался, чем знаниями по маскам :)

Пример:

from PyQt5.QtGui import QGuiApplication, QPixmap
from PyQt5.QtCore import Qt


app = QGuiApplication([])

pixmap = QPixmap("cat.jpg")
pixmap.setMask(pixmap.createHeuristicMask(Qt.transparent))
pixmap.save('cat.png')

Результат (в PyCharm):

введите сюда описание изображения

→ Ссылка
Автор решения: S. Nick

Для этих целей есть хороший сервис и я не могу не поделиться им, так как сам им пользуюсь.

Загрузите изображение в удалить фон https://www.remove.bg/upload

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка