OpenCV / cvSum : Calculates the sum of array elements

2017-08-18 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
OpenCV 2.4.13.2 documentationの、
OpenCV API Reference」の、
Operations on Arrays」に、

  sum
  Calculates the sum of array elements.

  C: CvScalar cvSum( const CvArr* arr )

   arr - input array that must have from 1 to 4 channels

  The functions sum calculate and return the sum of array elements,
   independently for each channel.

がある。


先日(2017-08-14)の記事「GSL Shell 学習:“cv2_a.lua”モジュール?」で作った、
“cv2_a.lua”サブプログラムを使って、

試しにコーディングしてみた:
----- CV_Sum_of_Vec.gsl -----
require'cv2_a'

----- double 版
T = matrix.vec{ 0.1, 0.2, 0.4, 7.6, 0.8, 1.0 }

v = cv2.cvCreateMat( 1, #T, CV_64FC1 )
ffi.copy( v.Dbl, T.data, #T*8 )

print( cv2.cvSum(v).v1 )

-------------------------------------------------

----- long 版
T = ffi.new( 'int32_t[6]', 1, 2, 4, 76, 8, 10 )

i = cv2.cvCreateMat( 1, 6, CV_32SC1 )
ffi.copy( i.Int, T, 6*4 )

print( cv2.cvSum(i).v1 )
2パターンとも行けました。


と、以上は行ベクトルだった。


(多分行けるでしょうが)列ベクトルではどうか?
念の為コーディングしてみた:
----- Sum_of_Vec_CV_col.gsl -----
require'cv2_a'

----- double 版
T = matrix.vec{ 0.1, 0.2, 0.4, 7.6, 0.8, 1.0 }

v = cv2.cvCreateMat( #T, 1, CV_64FC1 ) -- 列ベクトル
ffi.copy( v.Dbl, T.data, #T*8 )

print( cv2.cvSum(v).v1 )

-------------------------------------------------

----- long 版
T = ffi.new( 'int32_t[6]', 1, 2, 4, 76, 8, 10 )

i = cv2.cvCreateMat( 6, 1, CV_32SC1 ) -- 列ベクトル
ffi.copy( i.Int, T, 6*4 )

print( cv2.cvSum(i).v1 )
(当然の事ながら?)行けました。



本日はここまで。


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


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


170709,10
スポンサーサイト

GSL 学習:“gsl_a.lua”モジュール?

2017-08-16 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-08-14)の記事「GSL Shell 学習:“cv2_a.lua”モジュール?」で、

昨年(2016-03-26)の記事「GSL Shell 学習:“cv2.lua”モジュール自作」で書いた、
'cv2'モジュールを全面的に置き換えて、
cv2_a.luaなるサブプログラムを作った。

同じ様に、
“GSL Shell”が包含しているDLL“libgsl-0.dll”についてもやってみた。

“libgsl-0.dll”に就いては、
昨年(2016-02-14)の記事「GSL Shell 学習:“libgsl-0.dll”で十分だった」で書いている。


それで、バージョンはよく分からないが、
1.8よりは新しそうだが2.0ではなさそうなので、

ftpサイト:Index of /pub/GNU/gsl
から、古いかも知れないがgsl-1.9.tar.gzをダウンロードした。

そして、取り敢えずdouble版と、long版について、
一部、計 16 ヘッダーファイルを取り込んだ。
「gsl_block_double.h」「gsl_block_double_long.h」「gsl_histogram.h」「gsl_histogram2d.h」「gsl_interp.h」「gsl_permute_double.h」「gsl_permute_long.h」「gsl_sort_double.h」「gsl_sort_long.h」「gsl_statistics_double.h」「gsl_statistics_long.h」「gsl_spline.h」「gsl_matrix_double.h」「gsl_matrix_long.h」「gsl_vector_double.h」「gsl_vector_long.h」

これらのファイルから“構造体”と“関数”の定義を抜き出した。
「gsl_cdef_Struct.lua」と「gsl_cdef_Func.lua」

“OpenCV”と同様なチェックを行った。
「GSL_VAR」宣言が付いているものと、
構造体名に“_view”が付いているものがジャマ(?)をする。


あれこれ“調べ/考え”た結果、

「GSL_VAR」宣言は単純に消せば行ける?
名前に“_view”が付いているものについては、
ffi.cdef[[
typedef gsl_matrix_view _gsl_matrix_view;
typedef gsl_matrix_const_view _gsl_matrix_const_view;
typedef gsl_vector_view _gsl_vector_view;
typedef gsl_vector_const_view _gsl_vector_const_view;

typedef gsl_vector_long _gsl_vector_long_view;
typedef gsl_vector_long _gsl_vector_long_const_view;
]]
で誤魔化した。

これで、“gsl_a.lua”サブプログラムを作った:
----- gsl_a.lua -----
gsl = require'gsl'

ffi.cedf[[
// ここには、「gsl_cdef_Struct.lua」
]]


ffi.cedf[[
// ここには、「gsl_cdef_Func.lua」
]]


これを利用するときは、

  require'gsl_a'

で読み込み、

関数を使うときは、

  M = matrix.vec{ 0.2, 2.0, -0.5, 1.1, 0, 4.0 }
  k = gsl.gsl_stats_max_index( M.data, 1, 6 )

の様な感じ。


これで、double版、long版のそれなりの数の関数が使える?


本日はここまで。


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


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


170706,07

GSL Shell 学習:“cv2_a.lua”モジュール?

2017-08-14 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-08-12)の記事「OpenCV 学習:関数プロトタイプ宣言一覧」で、
関数プロトタイプ宣言「cv_cdef_Func.lua」ファイル、
構造体等定義ファイル「cv_cdef_Struct.lua」ファイル、
が一応出来た?

そこで、
以前(2017-08-05)の記事「OpenCV 学習:定数コードの値」で書いた、
“CV_constant.txt”ファイルも含めて、

昨年(2016-03-26)の記事「GSL Shell 学習:“cv2.lua”モジュール自作」で書いた、
'cv2'モジュールを全面的に置き換えることにした。


と云っても、モジュールではない?
単なるサブプログラムでしょうか?


ファイル名は cv2_a.luaとした:
----- cv2_a.lua -----

----- 最初に定義:
cv2 = ffi.load( 'opencv_world300' )


--[[
   ここに「CV_constant.txt」の中身
]]


--[[
   ここに「cv_cdef_Struct.lua」の初め部分
]]
  charA = |s| ffi.cast( 'char*', s )
  voidA = |a| ffi.cast( 'void*', a )
  intA = |v| ffi.cast( 'void*', v )

  NULL = voidA(0)


--[[
   次に、「cv_cdef_Struct.lua」の残り部分
]]

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

// 続けて、OpenCV 固有の構造体

typedef void CvArr;
typedef struct CvPoint{ int x; int y; } CvPoint;
/*****************/
/*****************/

]]


----- 最後に「cv_cdef_Func.lua」の宣言

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 );
/*****************/
/*****************/

]]
以上、約 700 行ほど。


これを利用するときは、

  require'cv2_a'

で読み込み、

関数を使うときは、

  cv2. cvLoadImageM( 'hoge.tif', CV_LOAD_IMAGE_GRAYSCALE )
  print( img.xx, img.yy )
  cv2.cvSaveImage( 'out.tif', img, 0 )

の様な感じ。


これで、それなりの数の関数が使えるものができた?


本日はここまで。


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


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


170707

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

OpenCV 学習:cvMinMaxLoc

2017-08-11 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-08-09)の記事「GSL 学習:gsl_stats_max_index」では、
OpenCVから逸れて、GSLの学習だった。

今回は、
本流?に戻って、OpenCVの学習。


OpenCV 2.4.13.2 documentation
minMaxLoc」では、

  Finds the global minimum and maximum in an array.
void cvMinMaxLoc( const CvArr* arr, double* min_val, double* max_val,
CvPoint* min_loc=NULL, CvPoint* max_loc=NULL, const CvArr* mask=NULL )
 Parameters:
  ・src - input single-channel array.
  ・minVal - pointer to the returned minimum value; NULL is used if not required.
  ・maxVal - pointer to the returned maximum value; NULL is used if not required.
  ・minLoc - pointer to the returned minimum location (in 2D case); NULL is used if not required.
  ・maxLoc - pointer to the returned maximum location (in 2D case); NULL is used if not required.
  ・mask - optional mask used to select a sub-array.
(パラメータ名は、C++ 用なので、読み替えが必要)
とある。


そこで、
3行4列マトリックスの2行目のデータに関してテストしてみた:

----- CV_cvMinMaxLoc.gsl -----
cv2 = require'cv2'
ffi.cdef[[
void cvMinMaxLoc( CvArr* arr, double* Min, double* Max, CvPoint* Minidx, CvPoint* Maxidx, CvArr* mask );
]]
--- 3行4列マトリックス
arr = cv2.cvCreateMat( 3, 4, 6 ) -- CV_64FC1
T = { 0.2, 4, -0.5, 1, 1.1, 0, 3.0, -3, 1.2, -5, 0, 2 }
for n=0,11 do arr.Dbl[n]=T[n+1] end

Min=ffi.new('double[1]'); Max=ffi.new('double[1]')
PMin=ffi.new('CvPoint[1]'); PMax=ffi.new('CvPoint[1]')

mask = cv2.cvCreateMat( 3, 4, 0 )
for n=0,11 do mask.Byte[n]=0 end
for n=4,7 do mask.Byte[n]=1 end --- 2行目を対象に

cv2.cvMinMaxLoc( arr, Min, Max, PMin, PMax, mask )

--- 結果確認
print( Min[0], Max[0], PMin[0].x, PMin[0].y, PMax[0].x, PMax[0].y )
これでOK。


本日はここまで。


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


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


170701

GSL 学習:gsl_stats_max_index

2017-08-09 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-08-07)の記事「OpenCV 学習:CvMat型学習サイト」では、
 ・・・・・
 ・・・・・
 それで、
 2番目の ・線形代数の、
 13番目の 行列要素の最小値・最大値を求める
  行列要素の最小値・最大値,およびそれの位置を求めます.
  (例えば,最大値だけが必要で,最小値が不要な場合など)
  求める必要がないパラメータには NULL を渡すこともできます.
  また,マスクを利用して,
  限定された範囲内の最小値・最大値を求めることも可能です.
 などなどが気になった。
 ・・・・・
 ・・・・・

で終わっていたが、・・・・・

ふと思いついた。
この様なことは、GSL Shellが包含している、
GSL - GNU Scientific Library」でも、
当然出来るのでは?

と云うことで、調べてみた。

GSL Reference Manual - HTML」を見ると、・・・

Statistics」に有るのでは?

Maximum and Minimum values
に、
double gsl_stats_max( const double data[], size_t stride, size_t n )
などがある。


手始めに、
上記と、
size_t gsl_stats_max_index( const double data[], size_t stride, size_t n )
を使ってみた。


----- test_use_GSL.gsl -----
gsl = require'gsl'

ffi.cdef[[
double gsl_stats_max ( const double data[], const size_t stride, const size_t n );
int gsl_stats_max_index ( const double data[], const size_t stride, const size_t n );
]]

x = matrix.vec{ 3.5, 3.1, 3 }
y = gsl.gsl_stats_max( x.data, 1, 3 )
print( y )

k = gsl.gsl_stats_max_index( x.data, 1, 3 )
print( k, x[k+1] )
これは、使える。


もっと、
GSL - GNU Scientific Library を学習しよう。


本日はここまで。


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


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


170630

OpenCV 学習:CvMat型学習サイト

2017-08-07 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
OpenCV 学習”と云うことで、
OpenCV.jp : OpenCV逆引きリファレンス」サイトを見つけた。

だが、
このサイトについては、
昨年3月(2016-03-04)の記事「GSL Shell 学習:OpenCV の CvMat 型」で
書いていた:
  ・・・・・
  ・・・・・
  「OpenCV.jp」の「OpenCV-CookBook」サイト内の、
  「cv::Matの基本処理
  には、
  ・・・・・
  ・・・・・

更にその後の記事「OpenCV:CV_8UC3 のコード値」でも:
  ・・・・・
  ・・・・・
  上記記事以前(2016-03-04)に書いていた記事:
  「GSL Shell 学習:OpenCV の CvMat 型」で、
  参照(&学習?)していた「OpenCV-CookBook」の、
  「cv::Matの基本処理
  を良く見れば載っていたのだった。
  ・・・・・
  ・・・・・


そう云う訳で、
今度こそはこのサイトでしっかり学習することにした。

 基本的に OpenCV (と依存ライブラリ),
  および標準ライブラリ以外は使用しません.
 OpenCVはEigenなしでも利用できますが,
  このサンプルの中にはEigen必須のものもあります.
 また,2.4.0以降に導入された書式には一部対応しておらず,
  古い書き方で書かれているサンプルもあります.
 指摘や訂正,リクエストなどは OpenCV.jp か, @idojun (Twitter) まで.

 OpenCV 2.4.0 対応:
 ・cv::Matの基本処理
   ・cv::Matの概要
   ・cv::Mat の内容を std::cout に出力する
   ・cv::Matにおけるメモリの自動管理
   ・cv::Matを初期化する
   ・cv::Matの行数・列数・次元数を調べる
   ・cv::Matのビット深度を調べる
   ・cv::Matのデータがメモリ上で連続しているかを調べる
   ・cv::Matが部分配列かを調べる
   ・cv::Matの様々なプロパティ
   ・cv::Matの型(ビット深度)を変換する
   ・cv::Matをリサイズする
   ・cv::Matを変形する
   ・cv::Matの特定の行/列を取り出す
   ・cv::Matの部分行列を取り出す
   ・cv::Mat のチャンネルの合成と分離
   ・cv::Matの列/行毎の合計,平均値,最小,最大値を求める
   ・・・・・
   ・・・・・
 ・線形代数
   ・行列要素の四則演算を行う
   ・行列同士の積を求める
   ・cv::Vecの内積と外積
   ・ノルムを求める
   ・行列式を求める
   ・行列の転置
   ・行列の対角成分を取り出す
   ・行列のトレースを求める
   ・逆行列/疑似逆行列を求める
   ・2次元ベクトルの角度と大きさを求める
   ・角度と大きさから2次元座標を求める
   ・行列を反転する
   ・行列要素の最小値・最大値を求める
   ・・・・・
   ・・・・・
 ・画像処理
   ・画像を単色で塗りつぶす
   ・色空間を変換する
   ・画像サイズを変更する
   ・画像を垂直・水平に反転する
   ・画像をネガポジ反転する
   ・画像を2値化する
   ・画像を回転する
   ・2次元のアフィン変換を行う
   ・・・・・
   ・・・・・
 ・描画処理
   ・・・・・
   ・・・・・
 ・入出力とGUI
   ・・・・・
   ・・・・・
 ・その他の機能
   ・・・・・
   ・・・・・


それで、
2番目の ・線形代数の、
13番目の 行列要素の最小値・最大値を求める
  行列要素の最小値・最大値,およびそれの位置を求めます.
  (例えば,最大値だけが必要で,最小値が不要な場合など)
  求める必要がないパラメータには NULL を渡すこともできます.
  また,マスクを利用して,
  限定された範囲内の最小値・最大値を求めることも可能です.

などなどが気になった。


このサイトで、OpenCV の学習だ。


本日はここまで。


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


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


170630

OpenCV 学習:定数コードの値

2017-08-05 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
OpenCVの“DLL”opencv_world300.dllを使っている。

ドキュメントで関数のプロトタイプを調べると、
出てくるのは、CV_8UC1とかと云った定数コード。

そこで、これまで調べたコト等々を纏めてみた。

取り敢えず、“CV_constant.txt”として備忘録とした。

以下、全くの<紙>用のもの:
----- CV_constant.txt -----

----- Image 作成用
CV_8U = 0; CV_8UC1 =0; CV_8UC2=8; CV_8UC3=16
CV_8S = 1; CV_8SC1 =1
CV_16U = 2; CV_16UC1=2; CV_16S = 3; CV_16SC1= 3
CV_32S = 4; CV_32SC1=4; CV_32SC2=12; CV_32SC3=20
CV_32F = 5; CV_32FC1=5; CV_32FC2=13; CV_32FC3=21
CV_64F = 6; CV_64FC1=6; CV_64FC2=24

----- Image 読み込み用
CV_LOAD_IMAGE_UNCHANGED=-1
CV_LOAD_IMAGE_GRAYSCALE= 0
CV_LOAD_IMAGE_COLOR = 1


----- Contour 検出モード
CV_RETR_EXTERNAL =0
CV_RETR_LIST =1 -- デフォルト
CV_RETR_CCOMP =2
CV_RETR_TREE =3
CV_RETR_FLOODFILL=4

----- Contour 近似方法
CV_CHAIN_CODE =0
CV_CHAIN_APPROX_NONE =1
CV_CHAIN_APPROX_SIMPLE =2 -- デフォルト
CV_CHAIN_APPROX_TC89_L1 =3
CV_CHAIN_APPROX_TC89_KCOS=4
CV_LINK_RUNS =5


----- Image カラー変換
CV_BGR2BGRA =0; CV_RGB2RGBA=0
CV_BGRA2BGR =1; CV_RGBA2RGB=1
CV_BGR2RGBA =2; CV_RGB2BGRA=2
CV_RGBA2BGR =3; CV_BGRA2RGB=3
CV_BGR2RGB =4; CV_RGB2BGR =4
CV_BGRA2RGBA=5; CV_RGBA2BGRA=5
CV_BGR2GRAY =6 -- カラーからGray
CV_RGB2GRAY =7
CV_GRAY2BGR =8 -- Grayからカラー
CV_GRAY2RGB =8
CV_GRAY2BGRA=9: CV_GRAY2RGBA=9
CV_BGRA2GRAY=10
CV_RGBA2GRAY=11


----- Image 補間方法
CV_INTER_NEAREST =0
CV_INTER_LINEAR =1
CV_INTER_CUBIC =2
CV_INTER_AREA =3
CV_INTER_LANCZOS4=4

----- Rotation / affine transformation
CV_CV_WARP_FILL_OUTLIERS= 8
CV_CV_WARP_INVERSE_MAP =16


----- マウスイベントの種類
CV_EVENT_MOUSEMOVE = 0 -- マウスカーソルが動いた
CV_EVENT_LBUTTONDOWN = 1 -- 左ボタンが押された
CV_EVENT_RBUTTONDOWN = 2 -- 右ボタンが押された
CV_EVENT_MBUTTONDOWN = 3 -- 中央ボタンが押された
CV_EVENT_LBUTTONUP = 4 -- 左ボタンが離された
CV_EVENT_RBUTTONUP = 5 -- 右ボタンが離された
CV_EVENT_MBUTTONUP = 6 -- 中央ボタンが離された
CV_EVENT_LBUTTONDBLCLK = 7 -- 左ボタンがダブルクリックされた
CV_EVENT_RBUTTONDBLCLK = 8 -- 右ボタンがダブルクリックされた
CV_EVENT_MBUTTONDBLCLK = 9 -- 中央ボタンがダブルクリックされた

----- フラグの種類
CV_EVENT_FLAG_LBUTTON = 1 -- マウス左ボタンが押されているか
CV_EVENT_FLAG_RBUTTON = 2 -- マウス右ボタンが押されているか
CV_EVENT_FLAG_MBUTTON = 4 -- マウス中央ボタンが押されているか
CV_EVENT_FLAG_CTRLKEY = 8 -- CTRLボタンが押されているか
CV_EVENT_FLAG_SHIFTKEY = 16 -- Shiftボタンが押されているか
CV_EVENT_FLAG_ALTKEY = 32 -- Altボタンが押されているか


-- cvCreateSeq 用
CV_SEQ_ELTYPE_POINT = 12 -- CV_32SC2 /* (x,y) */
CV_SEQ_ELTYPE_CODE = 0 -- CV_8UC1 /* フリーマンコード: 0..7 */
CV_SEQ_ELTYPE_GENERIC = 0 -- 0 /* 一般的なシーケンス要素型 */
CV_SEQ_ELTYPE_PTR = 6 -- CV_USRTYPE1 /* =6 */
--- CV_SEQ_ELTYPE_PPOINT CV_SEQ_ELTYPE_PTR /* 他のSeq要素へのポインタ */
--- CV_SEQ_ELTYPE_INDEX CV_32SC1 /* 他のSeqの要素のインデックス */
--- CV_SEQ_ELTYPE_GRAPH_EDGE CV_SEQ_ELTYPE_GENERIC /* ・・・・・ */
--- CV_SEQ_ELTYPE_GRAPH_VERTEX CV_SEQ_ELTYPE_GENERIC /* 最初の辺, &(x,y) */
--- CV_SEQ_ELTYPE_TRIAN_ATR CV_SEQ_ELTYPE_GENERIC /* 二分木の頂点ノード */
--- CV_SEQ_ELTYPE_CONNECTED_COMP CV_SEQ_ELTYPE_GENERIC /* 連結成分 */
--- CV_SEQ_ELTYPE_POINT3D CV_32FC3 /* (x,y,z) */
と云ったところ。


本日はここまで。


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


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


170629-0706

OpenCV 学習:cvFitEllipse2をCvMat型点データで

2017-08-03 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
以前(2017-07-22)の記事「GSL Shell/OpenCV 学習:cvFitEllipse2 は正常」で書いたプログラムでは、
入力の点データ群は“CvSeq”型で定義したが、
<紙>的には、面倒なので“CvMat”型で使えないか学習した。

---- test_CvMat-Points_FitEllips.gsl -----
cv2 = require'cv2'
ffi.cdef[[
/****************************/
/* 不足分の関数宣言を記述 */
/****************************/
]]
X=ffi.new('int32_t[8]', 35, 46, 48, 39, 26, 21, 26, 35 )
Y=ffi.new('int32_t[8]', 22, 26, 43, 51, 50, 40, 28, 23 )

------------- 2 列で定義する -----
points = cv2.cvCreateMat( 8, 2, 4 ) -- 4==CV_32S
M = points.Int
for i=0,7 do M[2*i]=X[i]; M[2*i+1]=Y[i] end

ell = cv2.cvFitEllipse2( points )

---------- 確認 -----
print( ell.x, ell.y, ell.xx, ell.yy, ell.angle )

でしょうか?

多分、正しく求まっている様ダ。


本日はここまで。


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


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


170625

LuaCV:CvMat型も使える

2017-08-01 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-07-30)の記事「OpenCV:cvFindContours 正常に出来た
で書いた如く、
  原因が分からなかった、cvFindContoursの結果不正。
  遂に、原因が判明した。
  ・・・・・
  ・・・・・
  これで、やっと懸案事項が解決した。

と云うことで、
もう“LuaCV”を使うことは無いだろうが、
駄目押しで、1点確認してみた。


以前(2017-07-28)の記事:
LuaCV:OpenCV library wrapper for Lua language」の
プログラムでは、“IplImage”型画像データを使っていた。

この“LuaCV”即ちOpenCVバージョンは2.3.1で、
“CvMat”型画像データが使えるか?

と云うことで、書き直してみた:
----- test_CvMat_FindContors.lua -----
cv = require'luacv'

img2 = cv.LoadImageM( 'Threshold.tif' ) -- これはカラーモードでの読み込み
xx, yy = img2.width, img2.height

img1 = cv.Createmat( yy, xx, cv.CV_8UC1 ) -- GrayScale 用領域
cv.CvtColor( img2, img1, cv.CV_BGR2GRAY )

---------- 以下でテスト
storage = cv.CreateMemStorage()
a, contours = cv.FindContours( img1, storage, cv.CvContour["size"], cv.CV_RETR_LIST, cv.CV_CHAIN_APPROX_SIMPLE, cv.Point(0,0) )
print( contours ) -- 確認用
while contours do
print( contours.total ) -- 確認用
z = cv.FitEllipse2( contours )
print( z["center"].x, z["center"].y, z["size"].width, z["size"].height, z["angle"] ) -- 確認用

cv.Ellipse( img2, cv.Point(z["center"].x,z["center"].y), cv.Size(z["size"].width/2,z["size"].height/2), z["angle"], 0, 360, cv.Scalar(0,0,255), 1, 8,0 )

contours=contours.h_next
end

cv.SaveImage( 'CvMat_LuaCV.png', img2 )
cv.ClearMemStorage(storage)
でしょうか?

キッチリ結果が出ていた。
OKでした。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


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


170625
おきてがみ/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
ブックマーク