cpp中--函数返回多个值的方法

最近需要自己从底层根据算法写代码实现,需要一个函数返回多个值,由于我的项目是与opencv有关的, 需要在一个函数内返回多个double类型的值,我最开始想到的是使用Mat,我构造一个矩阵,然后将所需要的值从输出后的矩阵中获取即可,这是第一种方法,可是有很大的局限性,所以,我考虑使用结构体,好处是:可以返回多个类型的值,且在非opencv项目中同样使用;(且均适用于类的封装写法)

 

当然首先给出说的第一种方法吧。

我想返回4个double类型的数,可以进行如下的操作:

先给出函数实现

Mat TjCorrectImage::get_corrected_uv(Mat K, Mat RT, Mat W,double f)
{
	Mat uv;
	uv = K*RT*W;
	//归一化平面Z=1上
	double u = uv.at<double>(0, 0)/ uv.at<double>(2, 0);
	double v = uv.at<double>(1, 0) / uv.at<double>(2, 0);
	//像素坐标转换到图像坐标
	double x = f / K.at<double>(0, 0)*(u - K.at<double>(0, 2));
	double y = f / K.at<double>(1, 1)*(u - K.at<double>(1, 2));
	Mat xy = (Mat_<double>(2, 1) << x,y);
	return xy;
}

下面给出获取的方法

	TjCorrectImage correct;
	Mat x1y1_c = correct.get_corrected_uv(K, RT, W1, f);
	x1_c = x1y1_c.at<double>(0, 0);
	y1_c = x1y1_c.at<double>(1, 0);

这样就达到了获取2个double值的需要;

 

给出结构体的方法

//在头文件里
#include <iostream>
#include <fstream>
#include "opencv2/core/core.hpp"
#include "highgui/highgui.hpp" 
#include "opencv2/legacy/legacy.hpp" 
using namespace std;
using namespace cv;

typedef struct getxy {
	double x;
	double y;
}getxy;

class TjCorrectImage
{
public:


	getxy get_corrected_uv(Mat K, Mat RT, Mat W, double f);


};




//在对应的cpp中,定义函数,PS:头文件自己去包含去~

getxy TjCorrectImage::get_corrected_uv(Mat K, Mat RT, Mat W,double f)
{
	Mat uv;
	uv = K*RT*W;
	//归一化平面Z=1上
	double u = uv.at<double>(0, 0)/ uv.at<double>(2, 0);
	double v = uv.at<double>(1, 0) / uv.at<double>(2, 0);
	//像素坐标转换到图像坐标
	double x = f / K.at<double>(0, 0)*(u - K.at<double>(0, 2));
	double y = f / K.at<double>(1, 1)*(u - K.at<double>(1, 2));
	//Mat xy = (Mat_<double>(2, 1) << x,y);
	getxy xy;
	xy.x = x;
	xy.y = y;
	return xy;
}


//main调用

	TjCorrectImage correct;
	getxy x1y1_c = correct.get_corrected_uv(K, RT, W1, f);
	x1_c = x1y1_c.x;
	y1_c = x1y1_c.y;

 

 还可以进行数组的传递达到目的

示例如下:

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
//函数返回数组例子
double  *getxy(double x, double y)
{
	static double xy[1];
	//设置种子
	srand((unsigned)time(NULL));
	xy[0] = x;
	xy[1] = y;
	return xy;
}
int main()
{
	double *xy;
	xy = getxy(0.222, 0.9898);
	double a = *(xy);
	cout << a << endl;
	return 0;
}

 

 

 

 

 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值