--- Title: PyQt で画像のビューアを作る 6 Author: yamasyuh68 Web: https://mimemo.io/m/ydN6woxKQqGp7qE --- @[TOC](長くなったのでもくじをつけた) 190626 # ImageEnhancer (pillow 修正) https://live.staticflickr.com/65535/48188518282_5360dbd707_b.jpg 左側でマスクを作って右側に適用したところ https://live.staticflickr.com/65535/48188461336_bf4bd21cc0_b.jpg <code> <fig> - pillowとQtの画像のやりとり変更 予定通りイケた、落ちなくなりました (・∀・)ノ pillowのimageをQtで表示するときに、pillow側でQtimageクラスが用意されてて簡単に変換してくれる ただこれが動作不安定の原因っぽいので使うのをやめた pillowでバッファ上にBMPで書き出して、それをQt側で読み込むようにしただけで単純です pillow側のQtimageクラスも以外とこれと同じ事をやってるのかもしれない - pillowの記述変更 私が最初に試したのは古かったようだ 画質の調整はImageEnhanceクラスに統合されていて、使い方も統一されていて良くなってる これに合わせて書き換えた - 使い方が同じだからスクリプトももっと短く出来るはず スライダーへのコネクト関数も一つにしたい スライダー自体一つでも良いかもしれない、ラジオで分岐させれば ここら辺の使いやすさちょっと微妙だけれど - マスク付きの画像調整は基本出来てるし、動作も安定してきたのでこれからは作り込みじゃ しかしこういう感じだと**進める動機付けが弱い**んだよなあ・・・・( ̄― ̄?) ## 雑感です - 画質の調整はビューアとは別物なので分けて書くことにした 自作のビューアではdllにしてあって統合したんだけど pythonに関しては多分これからも別のスクリプトのままだと思うし - しかし日本語ではなんて訳すのかね? google先生に聞いたらカタカナでイメージエンハンサーって返ってきた やれやれ ┐('д')┌ ---- 190627 # Enhancer Qtでグラデ描画 - このソフトはここが重要、マスクを自在にかけるためにグラデを自由に描画したかった **ほぼ予定通りに出来た** この部分はQtのブラシを使った、pillowだと面倒らしいので Qtはすごいね Qpixmapからpillowへの変換が必要になるけどそこはこれから <code> <fig> - グラデはパラメータが結構多いのでスライダーもたくさん作った パラメータとスライダオブジェクトの組み合わせをリストで整理したらすっきり書けた ただし**リストを使うと可読性は低い**よなあ まあしかたないんだろうけど - **楕円のグラデ**も書きたいんだけど無理かな - 線形グラデにはまだ未対応 スライダーのパラメータへの割りふりは新しいリストを使って切り替えれば良いだけかもしれない ラジオで切り替える 簡単かもしれない (・∀・) --- 190628- # enhancer Qpixmapの変換、サブクラス化書き換え ## Qpixmapの変換 - Qtで描画したグラデをマスクとして使うためにpillowに変換  調べておいたことを試しただけだけどうまくいった ネットでは他のやり方も見たけど私のやり方で正解だと思う QbufferとQbuffer.data()はほぼpythonのbytearray()と同じだ ## サブクラス化とオブジェクト指向 - グラデのラベルをサブクラス化 グラデパラメータをマウスでグリグリするためサブクラス化した ついでにグラデの描画もサブクラスの中に持って行った - やりたいことを試しながら何とか一つ一つは出来るようになった しかしこのソフトはグラデを作ってそのグラデをマスクにして画質を調整していく そこら辺をリアルタイムで連携してやるためにはアルゴリズムがしっかりしていないとだめだ 改めて考えると、**オブジェクト毎に機能をはっきり切り分けた方が良い**と思うようになった その方がコードの流れがすっきりするし、他のルーチンとの関係もわかりやすい - おおざっぱには、グラデ用のラベルをサブクラス化して マウスによるパラメータの取得 グラデの描画 ラベルの表示 をこのクラスでやる方向にして書き換え中 右側とリアルタイムで連携することも出来るようになった(まだ途中だけど) - オブジェクト指向的な考え方が少しわかったような気がしてきた この方がわかりやすいしミスを発見しやすいし、他のルーチンに迷惑をかけづらいし分業もしやすい ただどこからどこまでをクラスで書くかに決まりは無いだろうから、あとはセンスなんだろう、そこら辺もプログラミングの楽しさですね ## スライダー - マウスでグラデを描画するようになるとスライダーの存在価値自体が今ひとつぼやけてくるが、スライダーもクラスで管理する方向 初期設定、スロットの受け、値をラベルクラスから受け取ること、逆に送ることも ## 右のラベルクラス - こっちもサブクラス化した方が良さそうだな 特に描画部分はマスク画像の関係もあって複雑だからすっきり書き換えたい # pillow の問題 - 実用化できそうな今になって気づいたんだけど、明るさの調整機能がおかしい とうか、私の思ったような画質にならない 明るくするとコントラストも上がる感じになってしまう ここら辺の理屈は画像のことを一から勉強しないとよくわからない気がするんだが、少なくとも希望とは違う - 現在はPhotoLineでヒストグラムのカーブを上げるような調整を行ってるんだけど、これは結構難しいのかもしれない - ということでpillow以外の別のモジュールを探したりしたがなかなかしっくりこない というか、見栄え良く明るくするのって簡単じゃ無いんだなあと改めて思う 明るさ、コントラスト、彩度、全て絡む、多分 今のままでは多分実用化は難しい プログラム的には進んできたのに肝心の部分dね行き詰まってきた どうしたものか?( ̄― ̄?)? ---- 190701 - ラベルのサブクラスと本体の連携をすっきり書き直し中 結構無駄なコードが多いことに気づく。その都度書き直してるが、やはり少しずつ書き足しのコードだとこういうことになるよな 設計が大事って事ですね まあ少しずつ試しながら進めるからこういうことにしかならない、どうしようもない部分もあるんだけどさ - ただ最初からクラスを意識した書き方は出来たかもしれない 今後の課題っすね - **トーンカーブ**を実装したくていろいろ調べてるがよくわからない openCVでも、もしかしたらpillowでもエンジンとしては使えるように思うんだけど、カーブをマウスでグリグリやる辺りがどうすれば良いのかわからん┐('д')┌ ここは画像処理ではなくて純粋にGUIの問題だなあ 以前画像にsvgの矢印を入れたとき、そもそもsvgの作成からやりたくて少し考えて諦めたテーマに近い どうやって調べたら良いのかもわかんない 手がかりだけでも欲しいが・・・ ---- → [戻る](https://mimemo.io/m/QORbW4qkvOoda0N)