Pythonで画像にぼかしをかけるっ!

I wrote: 2016/11/02

Pythonで画像にぼかしをかけて表示します。それとGUIツールのPyQtを使っています。

ぼかしをかけるのにはQGraphicsBlurEffectを使いぼかして描画しています。
このクラスのsetBlurRadius()の値が1だとほとんど変わらないので2以上がGoodです。
また、画像の読み込みにはQPixmapとQImageを使っています。

QGraphicsScene、QGraphicsPixmapItemやQPainterなどを使ってるのでやや複雑です。
まあ、こういう画像処理は慣れれば簡単になるはず…(´・ω・`)


以下はソース
import sys
from PyQt4 import QtGui, QtCore, uic
from Foo import Ui_MainWindow

class Sample(QtGui.QMainWindow): 
    def __init__(self, parent = None):
        super(Sample, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

    def paintEvent(self,event):
        painter = QtGui.QPainter()
        painter.begin(self)
        painter.setPen(QtGui.QColor('#FFFFFF'))
        painter.setBrush(QtCore.Qt.white)
        painter.drawRect(event.rect())

        effect = QtGui.QGraphicsBlurEffect()
        effect.setBlurRadius(3)

        scene = QtGui.QGraphicsScene()
        item = QtGui.QGraphicsPixmapItem()
        item.setPixmap(QtGui.QPixmap.fromImage(QtGui.QImage('./sample01.jpg')))     
        item.setGraphicsEffect(effect);
        scene.addItem(item)
        
        y = float((self.height() - scene.height()) / 2)
        target = QtCore.QRectF(0.0, y, float(self.width()),  float(self.height()))
        source = QtCore.QRectF(0.0, y, float(scene.width()),  float(scene.height()))

        scene.render(painter, target, source)
        painter.end()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    sample = Sample()
    sample.show()
    sys.exit(app.exec_())
実行されたアプリケーション
47