基于opencv的mat类型访问

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_38448815/article/details/82749031