OpenCV 矩阵乘法初学OpenCV现有如下程序,#include //通过三个函数分别实现矩阵乘法#include"cv.h" #include"highgui.h" void PrintMat(CvMat *A) //显示矩阵 {\x05int i,j;\x05for(i=0;irows;i++)\x05{\x05\x05printf("\n");\x05\x05swit
来源:学生作业帮助网 编辑:作业帮 时间:2024/08/08 00:21:42
![OpenCV 矩阵乘法初学OpenCV现有如下程序,#include //通过三个函数分别实现矩阵乘法#include](/uploads/image/z/4724339-59-9.jpg?t=OpenCV+%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95%E5%88%9D%E5%AD%A6OpenCV%E7%8E%B0%E6%9C%89%E5%A6%82%E4%B8%8B%E7%A8%8B%E5%BA%8F%2C%23include+%2F%2F%E9%80%9A%E8%BF%87%E4%B8%89%E4%B8%AA%E5%87%BD%E6%95%B0%E5%88%86%E5%88%AB%E5%AE%9E%E7%8E%B0%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95%23include%22cv.h%22+%23include%22highgui.h%22+void+PrintMat%28CvMat+%2AA%29+%2F%2F%E6%98%BE%E7%A4%BA%E7%9F%A9%E9%98%B5+%7B%5Cx05int+i%2Cj%3B%5Cx05for%28i%3D0%3Birows%3Bi%2B%2B%29%5Cx05%7B%5Cx05%5Cx05printf%28%22%5Cn%22%29%3B%5Cx05%5Cx05swit)
OpenCV 矩阵乘法初学OpenCV现有如下程序,#include //通过三个函数分别实现矩阵乘法#include"cv.h" #include"highgui.h" void PrintMat(CvMat *A) //显示矩阵 {\x05int i,j;\x05for(i=0;irows;i++)\x05{\x05\x05printf("\n");\x05\x05swit
OpenCV 矩阵乘法
初学OpenCV现有如下程序,
#include //通过三个函数分别实现矩阵乘法
#include"cv.h"
#include"highgui.h"
void PrintMat(CvMat *A) //显示矩阵
{
\x05int i,j;
\x05for(i=0;irows;i++)
\x05{
\x05\x05printf("\n");
\x05\x05switch(CV_MAT_DEPTH(A->type))
\x05\x05{
\x05\x05case CV_32F:
\x05\x05case CV_64F:
\x05\x05\x05for(j=0;jcols;j++)
\x05\x05\x05\x05printf("%9.3f",(float)cvGetReal2D(A,i,j));
\x05\x05\x05break;
\x05\x05case CV_8U:
\x05\x05case CV_16U:
\x05\x05\x05for(j=0;jcols;j++)
\x05\x05\x05\x05printf("%6d",(int)cvGetReal2D(A,i,j));
\x05\x05\x05break;
\x05\x05default:
\x05\x05\x05break;
\x05\x05}
\x05}
\x05printf("\n");
}
int main() // 测试矩阵乘法
{
double a[] = { 1 ,2 ,3 ,4 ,
5 ,6 ,7 ,8 ,
9 ,10 ,11 ,12 };
double b[] = { 1 ,5 ,9 ,
2 ,6 ,10 ,
3 ,7 ,11 ,
4 ,8 ,12 };
double c[9],d[9],e[9];
\x05
CvMat Ma,Mb,Mc,Md,Me;
cvInitMatHeader( &Ma,3,4,CV_64FC1,a,CV_AUTOSTEP );
cvInitMatHeader( &Mb,4,3,CV_64FC1,b,CV_AUTOSTEP );
cvInitMatHeader( &Mc,3,3,CV_64FC1,c,CV_AUTOSTEP );
\x05cvInitMatHeader( &Md,3,3,CV_64FC1,d,CV_AUTOSTEP );
\x05cvInitMatHeader( &Me,3,3,CV_64FC1,e,CV_AUTOSTEP );
\x05printf("矩阵A=");
PrintMat(&Ma);
\x05printf("\n");
\x05
\x05printf("矩阵B=");
PrintMat(&Mb);
\x05printf("\n");
\x05cvMatMulAdd( &Ma,&Mb,0,&Mc );
\x05printf("通过cvMatMulAdd()函数实现矩阵乘法C=A*B");
PrintMat(&Mc);
\x05printf("\n");
\x05
\x05cvMatMul(&Ma,&Mb,&Md);
\x05printf("通过cvMatMul()函数实现矩阵乘法D=A*B");
\x05PrintMat(&Md);
\x05printf("\n");
\x05
\x05cvGEMM(&Ma,&Mb,1,&Me,0,&Me,0);
\x05printf("通过cvGEMM()函数实现矩阵乘法E=A*B");
\x05PrintMat(&Me);
\x05printf("\n");
return 0;
}
主函数中的数组类型似乎只能是double,我尝试着把矩阵元素设成float或者unsigned之类的几种类型,结果要么运行出错要么结果显示乱码.请问为什么?是不是像这种处理矩阵的情况一般都要设置成double类型?
OpenCV 矩阵乘法初学OpenCV现有如下程序,#include //通过三个函数分别实现矩阵乘法#include"cv.h" #include"highgui.h" void PrintMat(CvMat *A) //显示矩阵 {\x05int i,j;\x05for(i=0;irows;i++)\x05{\x05\x05printf("\n");\x05\x05swit
只有double类型的才不会溢出
没问题啊?
你该数组type后,改没改initMatHeader里对应的第4个参数?