OpenCV 学習:関数プロトタイプ宣言一覧

2017-08-12 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-08-11)の記事「OpenCV 学習:cvMinMaxLoc」でも、
昨年(2016-03-26)の記事「GSL Shell 学習:“cv2.lua”モジュール自作」で書いた、
'cv2'モジュールを使っている。

作った時からかれこれ1年半が経過し、あれこれ学習してきた。
現在使っているOpenCVの“DLL”opencv_world300.dllに含まれている
多くの関数に関するプロトタイプ宣言の不足が目立ってきた。


そこで、一気にそこそこの数のプロトタイプ宣言をまとめたくなった。


都度参照している、
OpenCV 2.4.13.2 documentationの、
OpenCV API Reference」では、
以下の様にリンクの一覧がある。

 ・Introduction
   ・API Concepts
 ・core. The Core Functionality
   ・Basic Structures
   ・Basic C Structures and Operations
   ・Dynamic Structures
   ・Operations on Arrays
   ・Drawing Functions
   ・XML/YAML Persistence
   ・XML/YAML Persistence (C API)
   ・Clustering
   ・Utility and System Functions and Macros
   ・OpenGL interoperability
 ・imgproc. Image Processing
   ・Image Filtering
   ・Geometric Image Transformations
   ・Miscellaneous Image Transformations
   ・Histograms
   ・Structural Analysis and Shape Descriptors
   ・Motion Analysis and Object Tracking
   ・Feature Detection
   ・Object Detection
 ・highgui. High-level GUI and Media I/O
   ・User Interface
   ・Reading and Writing Images and Video
   ・Qt New Functions
 ・video. Video Analysis
 ・・・・・
 ・・・・・

この中で、
(上記)太字で表示した 13のページから、
C 言語用の関数定義を抽出し、
「cv_cdef_Func.lua」ファイルにまとめた。

その結果は、・・・・・

最初の「Basic C Structures and Operations
から抽出した一部:
ffi.cdef[[

CvPoint cvPoint( int x, int y );
CvPoint cvPointFrom32f( CvPoint2D32f point );
CvPoint2D32f cvPoint2D32f( double x, double y );
CvPoint2D32f cvPointTo32f( CvPoint point );
CvPoint3D32f cvPoint3D32f( double x, double y, double z );
CvPoint2D64f cvPoint2D64f( double x, double y );
CvPoint3D64f cvPoint3D64f( double x, double y, double z );
CvSize cvSize( int width, int height );
CvSize2D32f cvSize2D32f( double width, double height );
CvRect cvRect( int x, int y, int width, int height );
void cvClearND( CvArr* arr, const int* idx );
IplImage* cvCloneImage( const IplImage* image );
CvMat* cvCloneMat( const CvMat* mat );
CvMatND* cvCloneMatND( const CvMatND* mat );
CvSparseMat* cvCloneSparseMat( const CvSparseMat* mat );
void cvConvertScale( const CvArr* src, CvArr* dst, double scale, double shift );
void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask );
void cvCreateData( CvArr* arr );
IplImage* cvCreateImage( CvSize size, int depth, int channels );
IplImage* cvCreateImageHeader( CvSize size, int depth, int channels );
CvMat* cvCreateMat( int rows, int cols, int type );
/***********************************************************************/
/***********************************************************************/

]]


これに対応して、
構造体等の定義ファイル「cv_cdef_Struct.lua」を手作業で作った。
その一部:
-- 初めに、良く使う(Lua)関数等々の宣言

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

NULL = voidA(0)


-- 次に、<紙>流型宣言

ffi.cdef[[
typedef unsigned char Byte;
typedef unsigned short Word;
typedef unsigned int DWord;
]]


-- そして、OpenCV 固有の構造体

ffi.cdef[[

// 主に、Basic C Structures and Operations から、17の構造体(一部修正)

typedef void CvArr;
typedef struct CvPoint{ int x; int y; } CvPoint;
typedef struct CvPoint2D32f{ float x; float y; } CvPoint2D32f;
typedef struct CvPoint3D32f{ float x; float y; float z; } CvPoint3D32f;
typedef struct CvPoint2D64f{ double x; double y; } CvPoint2D64f;
typedef struct CvPoint3D64f{ double x; double y; double z; } CvPoint3D64f;
typedef struct CvSize{ union{ int width; int xx; }; union{ int height; int yy; }; } CvSize;
typedef struct CvSize2D32f{ union{ float width; float xx; }; union{ float height; float yy; }; } CvSize2D32f;
typedef struct CvRect{ int x; int y; union{ int width; int xx; }; union{ int height; int yy; }; } CvRect;

typedef struct CvBox2D{ float x; float y; float xx; float yy; float angle; } CvBox2D;
/***********************************************************************/
/***********************************************************************/

]]


そして、これで使えるのか?のチェックを行った:
-- test.gsl --
cv2 = ffi.load( 'opencv_world300' )
require'cv_cdef_Struct'
require'cv_cdef_Func'
以上3行のプログラムを作り、
実行=コンパイル?
エラー無く終われば定義漏れが無いと云える?


エラー=未定義構造体については、
都度追加していった
-- cv_cdef_Struct.lua に追加

typedef void CvSparseNode;
typedef void CvSparseMatIterator;
typedef void CvRNG;
typedef void CvHistogram;
/***************************************/
typedef int64_t int64;
typedef int64_t Cv_iplCreateImageHeader;
typedef int64_t Cv_iplAllocateImageData;
typedef int64_t Cv_iplDeallocate;
/***************************************/

の様にダミー定義を追加した。

これで、使えるものができる?


本日はここまで。


Lua ( GSL Shell ) / OpenCV 学習は続く。


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


170703-06
関連記事
スポンサーサイト

コメントの投稿

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

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



おきてがみ

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