cvConvertScale(cvCvtScale)を使って行列と画像を変換できる.

void cvConvertScale( const void* src, void* dst, double scale, double shift );

srcをdstに変換する.本来は明度値の正規化のためだが,行列から画像への変換にも使えて便利.

引数

  • src:元の行列/画像
  • dst:変換後の行列/画像
  • scale:srcの値をscale倍する.defaultは1
  • shift:srcの値をscale倍した後shift足す.defaultは0

返り値

  • voidなのでなし

cvCvtScale( const void* src, void* dst, double scale, double shift );

cvScale( const void* src, void* dst, double scale, double shift );

  • 両者ともcvConvertScaleの完全別名

cvConvert( const void* src, void* dst);

  • cvConvertScale( src, dst, 1, 0);と等価
  • ただ行列<->画像間の変換ならば,このdefineを利用するのが吉

CvMat* cvGetMat(IplImage *image, CvMat* header);

行列から画像を生成

引数

  • image:IplImage*型の画像

返り値

  • 行列へのポインタ(header)

IplImage* cvGetImage(CvMat *matrix, IplImage* header);

画像から行列を生成

引数

  • matrix:CvMat*型の画像

返り値

  • 画像へのポインタ(header)

解説

  • 本来ならcvConvertScaleは,sin波を明度値に変換と言った,明度値の正規化が目的
  • scaleとshiftを省略すればCvMat型とIplImage型の間の変換関数となる
    • これは本家のマニュアルにも書かれている使い方
    • 唯一CV_ELEM_SIZEだけは変わってしまう模様だが,他への影響は不明
    • CV_ELEM_SIZEはmat->typeの上13bit分.なんに使われているかは不明
  • cvCvtScale, cvScale, cvConvertはすべてdefineを使ったこの関数の別名
  • cvConvertScaleは値渡し, cvGetMat, cvGetImageは参照渡し
    • cvGetMat, cvGetImageでheaderは違う型のポインタだが,
    • それぞれ配列の領域を確保しておく必要はない.
    • CvMat型の構造,IplImage型の構造を知っておけば,混乱せずにすむ.

サンプルコード

実体ファイル

  • cxcore/src/cxconvert.cpp (cvConvertScale)
  • cxcore/src/cxarray.cpp (cvGetMat, cvGetImage)
  • cxcore/include/cxcore.h

ジャンル:OpenCV:OpenCV 1.0準拠


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-27 (木) 11:57:28 (2738d)