重み付き和.ぶっちゃけ掛けて足すだけ
- void cvAddWeighted( CvMat* src1, double alpha, CvMat* src2, double beta, double gamma, CvMat* dst );
- void addWeighted( Mat src1, double alpha, Mat src2, double beta, double gamma, OutputArray dst, int dtype );
- 解説
- サンプルコード
- 実体ファイル
void cvAddWeighted( CvMat* src1, double alpha, CvMat* src2, double beta, double gamma, CvMat* dst );†
src1とsrc2の重み付き和をdstで返す
- src1:CvMat*型の入力行列/ベクトル
- src2:CvMat*型の入力行列/ベクトル
- dst:CvMat*型の出力行列/ベクトル
- alpha:double型のsrc1の係数
- beta:double型のsrc2の係数
- gamma:double型の足し算係数
返り値†
void addWeighted( Mat src1, double alpha, Mat src2, double beta, double gamma, OutputArray dst, int dtype );†
C++インタフェース版.C版の関数ラッパーで,実態はC++版.
- src1:Mat型の入力行列/ベクトル
- src2:Mat型の入力行列/ベクトル
- dst:Mat型の出力行列/ベクトル
- alpha:double型のsrc1の係数
- beta:double型のsrc2の係数
- gamma:double型の足し算係数
- dtype:int型の出力行列/ベクトルの型
- 実際の所,以下の計算をする関数
&mimetex(dst(I)=\alpha * src1(I) + \beta * src2(I) + gamma);
- C++版で言えば,Matクラスに掛け算オペレータ*1が付いてるので関数を使わなくても計算できる
- 関数使った方が最適化されてるっぽい.
- 引数のCvMat*型やMat型はIplImage*やVecクラスでも代用可能
サンプルコード†
#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;
}
}}
実体ファイル†
ジャンル:OpenCV:OpenCV 1.1:OpenCV 2.3:OpenCV 2.4準拠