该MATLAB程序主要功能是检测某一张图片是否被篡改,如果篡改,则标志出篡改区域。记录如下:
1.MATLAB中的Round函数与OpenCV中的roundMat实现相同的功能;
2.MATLAB中的reshape与OpenCV中的reshape存在一定的区别:
假设一个矩阵A为[1 2;3 4];则Matlab中B = reshape(A, 1, 4)得到的结果B=[1 3 2 4];OpenCV中B=A.reshape(0,1)得到的结果B为B=[1 2 3 4]。其中OpenCV中reshape(0,1)中的0表示通道数不变,1表示转换后的矩阵为1行;
3.OpenCV中的sortIdx函数,如果排序的序列超过32个,则返回的序列索引可能不按原来的顺序排列。比如按第一列排序,第6行的第一列数据和第56行的第一列数据是同样大小,但是它返回的索引可能第56行在第6行前面。具体是为什么我也不知道;
4.OpenCV中的row()和rowRange()。假设A是一个Mat型的矩阵,则A.row(0)表示获得它的第0行=A.rowRange(0,1)。两种方法差不多,不过在取连续多行数据的时候rowRange()更加方便。col()和colRange()类似;
5.两个行列,类型一样的数组点乘方法可以有:
Mat F=A.*B;
或者Mat F=A.mul(B);
6.reduce(const CvArr* src(输入矩阵), CvArr* dst(输出矩阵), dim, type)
dim:矩阵被简化后的维数索引.0意味着矩阵被处理成一行,1意味着矩阵被处理成为一列,-1时维数将根据输出向量的大小自动选择.
type有以下几种取值: