js-ctypes 学習:OpenCV のマウスコールバック処理

2017-03-26 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-03-25)の記事「js-ctypes 学習:KWF_list 関数」で、
Win32API でのコールバック処理の実用的(?)なコードが作れた。

そこで、
先日(2017-03-19)の記事「js-ctypes 学習:cast そして OpenCV」で学習した、
画像処理の決定版(?)OpenCVに依る画像表示窓での
マウスイベントコールバック処理に挑戦。


プログラム内で指定した画像ファイルを読み込んで窓に表示。
この窓内でマウス(カーソル)を移動させたイベントを、
コールバック関数でそのカーソル位置を表示する。

と云ったもの。

出来たコードは:
// ===== mouseCB_CV.js =====
var VOID = ctypes.void_t; var Cast = ctypes.cast;
var Byte = ctypes.uint8_t; var Char = ctypes.char;
var DWORD = ctypes.uint32_t; var Int32 = ctypes.int32_t;
var CBABI = ctypes.stdcall_abi; var WinABI = ctypes.winapi_abi;

var lib = ctypes.open( 'opencv_world300' );

var CvMat = new ctypes.StructType( 'tagCvMat', [
{ 'type': DWORD }, { 'step': DWORD }, { 'refc': DWORD }, { 'hdrr': DWORD },
{ 'data': Byte.ptr }, { 'yy': Int32 }, { 'xx': Int32 } ]);

var CB_mouse = ctypes.FunctionType( CBABI, VOID, [ Int32, Int32, Int32, Int32 ] );

var cvLoadImageM = lib.declare( 'cvLoadImageM', WinABI, CvMat.ptr, Char.ptr, Int32 );
var cvNamedWindow= lib.declare( 'cvNamedWindow', WinABI, Int32, Char.ptr, Int32 );
var cvShowImage = lib.declare( 'cvShowImage', WinABI, VOID, Char.ptr, CvMat.ptr );
var cvWaitKey = lib.declare( 'cvWaitKey', WinABI, Int32, Int32 );
var cvDestroyAllWindows= lib.declare( 'cvDestroyAllWindows', WinABI, VOID );
var cvSetMouseCallback= lib.declare( 'cvSetMouseCallback', WinABI, VOID, Char.ptr, CB_mouse.ptr );

// ====================================
var fname = 'hogehoge.png'
var img = Cast( cvLoadImageM( fname, 0 ), CvMat.ptr ).contents;
var xx=img.xx; var yy=img.yy; var sz = xx * yy;

var BT = Cast( img.data, Byte.array(sz).ptr).contents;

function onmouse( event, x, y, flag ){
if( event == 0 ){ // 0 == cv2.EVENT_MOUSEMOVE
print( event, x, y, flag );
}
}

cvNamedWindow( 'img', 0 );
cvSetMouseCallback( 'img', CB_mouse.ptr(onmouse) );

while( true ){
cvShowImage( 'img', img.address() )
var k = cvWaitKey(50) & 0xFF;
if( k == 27 ){ break; } // esc to exit
}

cvDestroyAllWindows();
lib.close();
こんな感じ?

出来ました。

但し、
マウスを動かす毎にコンソール窓にダラダラ表示されるが。
未だ、学習の身なのでヨシとしよう。


本日はここまで。


SpiderMonkey ( JavaScript/js-ctypes ) 学習は続く。


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


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

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
10 | 2017/11 | 12
- - - 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 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

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

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


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

Google Analytics
ブックマーク