重み付き和.ぶっちゃけ掛けて足すだけ

#contents

*void cvAddWeighted( CvMat* src1, double alpha, CvMat* src2, double beta, double gamma, CvMat* dst ); [#a7cd2939]

src1とsrc2の重み付き和をdstで返す

**引数 [#m6029060]
-src1:CvMat*型の入力行列/ベクトル
-src2:CvMat*型の入力行列/ベクトル
-dst:CvMat*型の出力行列/ベクトル
-alpha:double型のsrc1の係数
-beta:double型のsrc2の係数
-gamma:double型の足し算係数

**返り値 [#i5425aeb]
-void型なのでなし

*void addWeighted( Mat src1, double alpha, Mat src2, double beta, double gamma, OutputArray dst, int dtype ); [#m8b74253]

C++インタフェース版.C版の関数ラッパーで,実態はC++版.

**引数 [#oc7490ca]
-src1:Mat型の入力行列/ベクトル
-src2:Mat型の入力行列/ベクトル
-dst:Mat型の出力行列/ベクトル
-alpha:double型のsrc1の係数
-beta:double型のsrc2の係数
-gamma:double型の足し算係数
-dtype:int型の出力行列/ベクトルの型

*解説 [#p6864b6a]
-実際の所,以下の計算をする関数~
&mimetex(dst(I)=\alpha * src1(I) + \beta * src2(I) + gamma);
-C++版で言えば,Matクラスに掛け算オペレータ((決してBL的な意味ではなく))が付いてるので関数を使わなくても計算できる
-関数使った方が最適化されてるっぽい.
-引数のCvMat*型やMat型はIplImage*やVecクラスでも代用可能

*サンプルコード [#gc9dd794]

#geshi(c++,number){{
#include "opencv2/core/core.hpp"

void main(){
  // src1の定義 [ 1 0 0; 0 1 0; 0 0 1] 単位行列
  cv::Mat src1	= cv::Mat::eye(  3, 3, CV_64FC1);
  // src2の定義 [ 1 1 1; 1 1 1; 1 1 1] 要素が全て1の行列
  cv::Mat src2	= cv::Mat::ones( 3, 3, CV_64FC1);
  // dstの定義  [ 0 0 0; 0 0 0; 0 0 0] 要素が全て0の行列
  cv::Mat dst	= cv::Mat::zeros(3, 3, CV_64FC1);

  // 重み付き和の計算 6:4の重み付きで和をdstに代入する
  cv::addWeighted(src1, 0.6, src2, 0.4, 0, dst);
  // 重み付き和の計算(Cインタフェース版) 重み係数が7:3.結局内部でC++版が呼ばれる
  cvAddWeighted(&(CvMat)src1, 0.3, &(CvMat)src2, 0.7, 0, &(CvMat)dst);
  // 重み付き和の計算 掛け算オペレータで等価な処理が可能
  dst	= src1 * 0.3 + src2 * 0.7;

  return;
}
}}

*実体ファイル [#r0e34a9f]
-[[:OpenCV 1.1]]以前
--cxcore/include/cxcore.h
--cxcore/src/cxarithm.cpp
-[[:OpenCV 2.3]][[:OpenCV 2.4]]
--modules/core/include/opencv2/core/core.hpp
--modules/core/src/arithm.cpp

ジャンル[[:OpenCV]][[:OpenCV 1.1]][[:OpenCV 2.3]][[:OpenCV 2.4]]準拠

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS