差の二乗和をエラー メトリック(画像登録)として使用して、顔画像を参照顔画像に合わせようとしています。基本的に、cvMatchTemplate 関数の同様の機能を実現しようとしています (ただし、テンプレート イメージはありませんが、一般的な表情はありません)。差分画像を二乗しようとすると、アサーション失敗エラー:-215 が表示されます。私の質問はまさに次のとおりです:行列乗算演算子 A*A または要素ごとの乗算 A.mul(A) を使用して、差分画像の 2 乗を取得する必要がありますか? (現在はA*Aを使用しています)
//Start search
Mat result;
for(int i= 0; i<15; i++){
for(int j= 0; j<15; j++){
xTrans = i; //Translation on x-Axis
yTrans = j; //Translation on y-Axis
//Initialize translation matrix
double m[2][3] = {{1,0,xTrans}, {0,1,yTrans}};
Mat map = Mat(2,3,CV_64F, m);
//Get the transformed image
warpAffine(displaced, aligned, map, aligned.size());
//Calculate the sum of squared differences
absdiff(reference,aligned,result);
try{
squared = result*result; //Error line
} catch (Exception const & e){
cerr<<"OpenCV exception: "<<e.what()<<std::endl;
}
SSD = sum(squared)[0]; //Sum of squared difference
cout <<xTrans << "," << yTrans << ","<<SSD<<endl;
}
}
エラーは次のとおりです。
OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1 || type ==
CV_64FC1 || type == CV_32FC2 || type == CV_64FC2)) in unknown function, file ..
\..\..\src\opencv\modules\core\src\matmul.cpp, line 711
OpenCV exception: ..\..\..\src\opencv\modules\core\src\matmul.cpp:711: error: (-
215) type == B.type() && (type == CV_32FC1 || type == CV_64FC1 || type == CV_32F
C2 || type == CV_64FC2)
warpAffine が正常に動作しているため、両方の画像のサイズとタイプは同じです。このエラーが発生する理由や実装の正確さについての提案は大歓迎です!