#include <iostream>
using namespace std;
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
#include "simple.h"
void printMat2(CvMat *romat,const char * name);
float matSum(CvMat * romat);
int main() {
float data[] = { 0.866025,-0.50000,0.50000,0.866025 };
CvMat romat;
cvInitMatHeader(
&romat,
2,
2,
CV_32FC1,
data
);
/*simple*/
float element_0_1 = CV_MAT_ELEM(romat, float, 0, 1);
cout << element_0_1<<endl;
cout << "请输入坐标(1,2)的值" << endl;
cin >> element_0_1;
*((float *)CV_MAT_ELEM_PTR(romat, 0, 1)) = element_0_1;
printMat2(&romat, "romat");
/*Complex*/
float * point =(float *) cvPtr2D(&romat, 0, 0);
cout << "*point的值是"<<*point << endl;
*point = 3;
*(++point) = 4;
*(++point) = 5;
printMat2(&romat, "romat");
cout << "坐标(2,2):" << cvGetReal2D(&romat, 1, 1) << endl;
cvSetReal2D(&romat, 1, 1, 6);
printMat2(&romat, "romat");
/*suitable*/
cout<<matSum(&romat)<<endl;
CvMat dog = imread("..//..//dog.bmp");
cout << matSum(&dog) << endl;
cin >> element_0_1;
}
void printMat2(CvMat *romat,const char * name) {
printf("%s\n", name);
for (int rol = 0; rol < romat->rows; rol++) {
for (int col = 0; col < romat->cols; col++)
cout << cvmGet(romat,rol,col)<< '\t';
//cvmGet与cvmSet是处理浮点型的单通道矩阵;
cout << endl;
}
}
float matSum(CvMat * romat) {
float sum = 0;
float *ptr;
for (int row = 0; row < romat->rows; row++)
{
ptr = (float *)(romat->data.ptr + row * romat->step);
for (int col = 0; col < romat->cols; col++) {
sum += *ptr++;
}
}
return sum;
}