GSL Shell 学習:“cv2.lua”モジュール自作

2016-03-26 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
7、2、0、0、1、 0、0、0、0、0(40)で、換算ポイント 88pt 。
「化学業界」「硝子業界」「FM COCOLO」「e-radio」、
「グルコサミン」「Python」「Firefox」bg値変動のみ。
「Perl」「C言語」「FM青森」全く変化無し。
・-・ - -・

さて、本文。

先月(2016-02-27)の記事:「GSL Shell 学習:モジュールの作り方
で、
  ・・・・・
  ・・・・・
  FFI で、“~.dll”を使う場合のモジュール定義「cv.lua」:
local cv = ffi.load( 'opencv_world300' )
ffi.cdef[[
int cvWaitKey( int );
]]
return cv
  として、

  利用する時:
local cv2 = require'cv2'
key_code=cv2.cvWaitKey(1)
  で、良さそう。
  ・・・・・
  ・・・・・
と書いている。


ここで、
これまでの学習で使った「opencv_world300」に含まれる関数をまとめて、
 cv2.lua
モジュールを作ってみた。

最初の1行と最後の1行は、前回記事と同じものですネ。
そして、ついでによく使う 'char*' や、'void*' へのキャスト関数も加えた。

出来たのは:
local cv = ffi.load( 'opencv_world300' )

ffi.cdef[[
typedef void CvArr;

typedef struct CvMat{
int type; int step; int* refcount; int hdr_refcount;
union{ unsigned char* Byte; char* Char; unsigned short* Word; int* Int; double* Dbl; };
union{ int rows; int height; int yy; };
union{ int cols; int width; int xx; };
} CvMat;
typedef struct _IplImage{
int nSize; int ID; int nChannels;
int alphaChannel; int depth;
char colorModel[4]; char channelSeq[4];
int dataOrder; int origin; int align;
union{ int cols; int width; int xx; };
union{ int rows; int height; int yy; };
struct _IplROI *roi; struct _IplImage* maskROI;
void* imageId; struct _IplTileInfo *tileInfo;
int imageSize; union{ void* data; char* imageData; };
int widthStep;
int BorderMode[4]; int BorderConst[4];
char* imageDataOrigin;
} IplImage;
typedef struct CvPoint{
int x; int y;
} CvPoint;
typedef struct CvRect{
int x; int y; int width; int height;
} CvRect;
typedef struct CvScalar{
double v1; double v2; double v3; double v4;
} CvScalar;

CvMat* cvCreateMat( int rows, int cols, int type );
void cvSetReal2D( CvArr* arr, int idx0, int idx1, double value );
double cvGetReal2D( const CvArr* arr, int idx0, int idx1 );

IplImage* cvLoadImage( const char* fname, int iscolor );
CvMat* cvLoadImageM( const char* fname, int iscolor );
int cvSaveImage( const char* fname, const CvArr* img, int );

void cvSetImageROI( IplImage*, CvRect );
void cvResetImageROI( IplImage* );
void cvAddS( IplImage*, CvScalar, IplImage* , IplImage* );

int cvNamedWindow( char*, int );
void cvShowImage( char*, CvArr* );
int cvWaitKey( int );
void cvDestroyWindow( char* );

typedef void ( __stdcall *CvMouseCallback ) ( int, int, int, int );
void cvSetMouseCallback( char*, CvMouseCallback );

int cvGetDimSize( const CvArr* arr, int index );
void cvCrossProduct( const CvArr* src1, const CvArr* src2, CvArr* dst );
double cvDotProduct( const CvArr* src1, const CvArr* src2 );

void cvFlip( const CvArr* src, CvArr* dst, int flip_mode );
void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color, int thickness, int line_type, int shift );

]]

charA = |s| ffi.cast( 'char*', s )
voidA = |a| ffi.cast( 'void*', a )

return cv
こんな感じでしょうか?


このモジュールは、
先月(2016-02-09)の記事:「GSL Shell 学習:fun 関数
で書いた:
  ・・・・・
  ・・・・・
  この「fun.lua」を、
  前回の「stringio.lua」と同じ
    「D:/TOOL/Lua/gsl-shell/gsl-shell/」
  に置いて、
  ・・・・・
  ・・・・・
の通り、

  「D:/TOOL/Lua/gsl-shell/gsl-shell/」

に置くことになる。


それで、このモジュールを使うと、
先日(2016-03-23)の記事:「GSL Shell 学習:CvMat 型画像に円を描く
で書いたコードは、・・・・・
local cv2 = require'cv2'

Pxy=ffi.new('CvPoint') Col=ffi.new('CvScalar')
function setPxy(x,y) Pxy.x=x Pxy.y=y end
function setCol(B,G,R) Col.v1=B Col.v2=G Col.v3=R Col.v4=0 end

img = cv2.cvLoadImageM( charA('hoge.tiff'), 1 ) -- BGR カラー
setPxy(10,20) setCol(0,0,255)
cv2.cvCircle( img, Pxy, 3, Col, 1, 8, 0 )
こんな感じでしょうか?


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


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


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

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 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
ブックマーク