/* #define cvAbs( src, dst ) cvAbsDiffS( (src), (dst), cvScalarAll(0)) cvAbsDiffS( const CvArr* srcarr1, CvArr* dstarr, CvScalar scalar ) { cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); CV_Assert( src1.size() == dst.size() && src1.type() == dst.type() ); cv::absdiff( src1, scalar, dst ); } CV_EXPORTS void absdiff(const Mat& a, const Mat& b, Mat& c); CV_EXPORTS void absdiff(const Mat& a, const Scalar& s, Mat& c); /****************************************************************************************\ * absdiff * \****************************************************************************************/ /* template<typename T> struct OpAbsDiff { typedef T type1; typedef T type2; typedef T rtype; T operator()(T a, T b) { return (T)std::abs(a - b); } }; template<> inline short OpAbsDiff<short>::operator ()(short a, short b) { return saturate_cast<short>(std::abs(a - b)); } template<typename T, typename WT=T> struct OpAbsDiffS { typedef T type1; typedef WT type2; typedef T rtype; T operator()(T a, WT b) { return saturate_cast<T>(std::abs(a - b)); } }; void absdiff( const Mat& src1, const Mat& src2, Mat& dst ) { static BinaryFunc tab[] = { binaryOpC1_<OpAbsDiff<uchar>,VAbsDiff8u>, 0, binaryOpC1_<OpAbsDiff<ushort>,VAbsDiff16u>, binaryOpC1_<OpAbsDiff<short>,VAbsDiff16s>, binaryOpC1_<OpAbsDiff<int>,NoVec>, binaryOpC1_<OpAbsDiff<float>,VAbsDiff32f>, binaryOpC1_<OpAbsDiff<double>,NoVec>, 0 }; dst.create(src1.size(), src1.type()); BinaryFunc func = tab[src1.depth()]; CV_Assert(src1.size() == src2.size() && src1.type() == src2.type() && func != 0); func( src1, src2, dst ); } void absdiff( const Mat& src1, const Scalar& s, Mat& dst ) { static BinarySFuncCn tab[] = { binarySOpCn_<OpAbsDiffS<uchar, int> >, 0, binarySOpCn_<OpAbsDiffS<ushort, int> >, binarySOpCn_<OpAbsDiffS<short, int> >, binarySOpCn_<OpAbsDiffS<int> >, binarySOpCn_<OpAbsDiffS<float> >, binarySOpCn_<OpAbsDiffS<double> >, 0 }; dst.create(src1.size(), src1.type()); BinarySFuncCn func = tab[src1.depth()]; CV_Assert(src1.channels() <= 4 && func != 0); func( src1, dst, s ); } */
#include "stdafx.h" #include <cv.h> #include <highgui.h> #include <cxcore.h> #include <iostream> using namespace std; int main( int argc, char** argv ) { CvMat *mat; mat=cvCreateMat(3,4,CV_32FC1); float value = 0.0; int i = 0, j = 0; cout<<"初始化原始数组"<<endl; for ( i = 0; i < 3; i ++ ){ for( j = 0; j < 4; j ++ ){ value -= 3.0; CV_MAT_ELEM( *mat, float, i, j) = value; } } cout<<"赋值后"<<endl; for ( i = 0; i < 3; i ++ ){ for( j = 0; j < 4; j ++ ){ cout<<" "<<CV_MAT_ELEM( *mat, float, i, j); } cout<<endl; } CvMat *matDes; matDes=cvCreateMat(3,4,CV_32FC1); cout<<"目标矩阵"<<endl; for ( i = 0; i < 3; i ++ ){ for( j = 0; j < 4; j ++ ){ cout<<" "<<CV_MAT_ELEM( *matDes, float, i, j); } cout<<endl; } // cvAbsDiffS(mat,matDes,cvScalarAll(0)); cvAbs( mat, matDes ); cout<<"数组的绝对值"<<endl; for ( i = 0; i < 3; i ++ ){ for( j = 0; j < 4; j ++ ){ cout<<" "<<CV_MAT_ELEM( *matDes, float, i, j); } cout<<endl; } cvReleaseMat( &mat ); cvReleaseMat( &matDes ); system("pause"); return 0; }