PictBear:プラグイン処理方式改訂

2015-04-24 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
5、1、1、1、0、 0、1、0、0、0(41)で、換算ポイント 69pt 。
一昨日夕方になって「グルコサミン」「Python」「Firefox」
「FM COCOLO」と「パソコン」で、bg値が若干アップした。
昨日朝方「Firefox」でbg値が大幅にダウンし3位から5位にダウン。
また「グルコサミン」でもbg値が大幅にダウンした。
今朝方「C言語」でbg値が大幅にダウンしトップから3位にダウン。
「Firefox」も又bg値が大幅にダウンし5位から7位にダウン。
また「グルコサミン」でもbg値が大幅にダウンした。
・-・ - -・


さて、本文。

前回(2015-04-22)の記事:「PictBear:プラグイン処理の流れ
では、
  ・・・・・
  ・・・・・
  そうすると、・・・
  「~.ppi」では、
  (1)「C:/_kami_/」に受け渡しの画像ファイル(バイナリファイル)を確保し、
  (2)その他のパラメータは、クリップボードに格納する。
  そして、「C:/_kami_/」にある、処理本体の Python ファイルを呼び出す。

  呼び出された「~.pyw」は、
  (1)カレントディレクトリを保存して、「C:/_kami_/」にチェンジする。
  (2)クリップボードと、バイナリファイルを読み込み、
  (3)所望の処理を実行し、
  (4)結果を、クリップボードと、バイナリファイルに書き戻し、
  (5)カレントディレクトリを元に戻して、呼び出し元に戻る。

  戻ってきた「~.ppi」では、
  (1)クリップボードと、バイナリファイルを読み込み、
  (2)必要な処理をして、バイナリファイルを削除し、
  (3)「PictBear」本体に戻る。

  以上の方式で、
  「PictBear」のフィルタ・プラグインを作って行ける!
  ・・・・・
  ・・・・・

としたが、もっとスッキリ(?)させたい。


つまり、・・・・・
「~.ppi」では、
(1)「C:/_kami_/」に受け渡しのバイナリファイルを確保し、
   そこに、画像データとパラメータを格納する。
(2)そして、「C:/_kami_/」にある処理本体の Python ファイルを呼び出す。

呼び出された「~.pyw」は、
(1)カレントディレクトリを保存して、「C:/_kami_/」にチェンジする。
(2)バイナリファイルを読み込み、
(3)所望の処理を実行し、
(4)結果を、バイナリファイルに書き戻し、
(5)カレントディレクトリを元に戻して、呼び出し元に戻る。

戻ってきた「~.ppi」では、
(1)バイナリファイルを読み込み、
(2)必要な処理をして、バイナリファイルを削除し、
(3)「PictBear」本体に戻る。


ようするに、クリップボードでの受け渡しをヤメて、
全てを1つのバイナリファイルとする。


その為に、
C(bcc32)によるメイン(?)プログラムでは、
データの先頭部分に数項目(これは、long 型データ)のパラメータを格納し、
それに続けて、画像データ(バイト型データ)を格納する。

この様なことは、
C言語では、当たり前(?)の処理コードで出来る。


それで、Python ではどの様にするか???

結果のコード:

cwdT = 'C:/_kami_'
# ----------------
import numpy as np
import ctypes as ct
import os, cv2
cwdS = os.getcwd(); os.chdir( cwdT )
AT = np.fromfile( '~~~', dtype=np.uint8 )
aT = AT.ctypes.data_as( ct.c_void_p )

NF = ct.cast( aT, ct.POINTER(ct.c_long) )
# xx = NF[0]; yy = NF[1]

BT = AT[ 2*4 : ]
th, CT = cv2.threshold( BT, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU )

NF[0] = int(th)
AT[ 2*4 : ] = CT[ : , 0 ]

AT.tofile( '~~~' )
os.chdir( cwdS )


以上で、
配列 AT は、Numpy の Array ( バイト型 )となり、
配列 NF は、Ctypes の Array ( long 型 )となる。

配列 BT は、Numpy の Array ( バイト型 )の画像データ部分で、
これに対して、大津の2値化を( OpenCV で )実行。

配列 CT は、2値化結果の画像で、th が閾値。

th と CT を、AT に戻して、
バイナリファイルに書き戻し、
処理終了。

最初は、
AT から、BT を作った時の逆と思って、
  AT[ 2*4 : ] = CT
としていたが、エラーが出た?!?

解決するまで些か時間を費やしたが、
  AT[ 2*4 : ] = CT[ : , 0 ]
の様にしないとダメだった。

つまり、CT が2次元アレイと成っていた!!!


なお、今回学習したことは:

(1)「Scipy.org」の「NumPy v1.9 Manual」の、
   「The N-dimensional array (ndarray)」にある、
   「numpy.ndarray.ctypes
   の、
   x.ctypes.data_as(ctypes.POINTER(ctypes.c_long))

(2)「Python 2.7ja1 Document」の「Python 標準ライブラリ」の、
   「15. 汎用オペレーティングシステムサービス」の
   「15.18. ctypes - Pythonのための外部関数ライブラリ
   にある、
   ctypes.cast(obj, type) 関数

の2項目でした。


今後は、
この改訂処理方式で、
「PictBear」のフィルタ・プラグインを作って行く?


さらに、学習は続く。 ・・・・・・・・・・


本日はここまで。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


150329
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク