部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图像处理中C++如何同时返回多个值

图像处理中C++如何同时返回多个值

作者头像
用户9831583
发布于 2022-06-16 06:27:28
发布于 2022-06-16 06:27:28
1.2K02
代码可运行
举报
文章被收录于专栏:码出名企路码出名企路
运行总次数:2
代码可运行

1 . pair<T,T> 返回两个值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//返回两个值的情况
pair<vector<double>,int>  R_R(Mat& img)
{   
   int n=img.rows;
   vector<double> a;
   unsigned int m=img.cols;
   unsigned int k=img.rows;
    for(unsigned int i=0;i<m;i++)
    {
        for(unsigned int j=0;j<k;j++)
        {
            a.push_back(img.at<double>(i,j));
        }
    }
   pair<vector<double>,int> data = std::make_pair(a,n);
   return data;
}

int main()
{   
   Mat img=imread("./1.png");
   pair<vector<double>,int> m_m=R_R(img);
   auto m_m=R_R(img);
   cout<<m_m.first[100]<<" "<<m_m.second<<endl;
   
   //或者定义如下接收函数值
   vector<double> m;
    int k;
   std::tie(m,k)=m_m=R_R(img);
   cout<<m[100]<<" "<<k<<endl;
   
   return 0;
 }

补充pair

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//1
vector<pair<int,double>> a;
a.push_back(make_pair(i,j));
cout<<a[i].first<<" "<<a[i].second<<endl;

//定义
pair<T1, T2> p1;           //创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,采用值初始化。
pair<T1, T2> p1(v1, v2);   //创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2。
make_pair(v1, v2);         // 以v1和v2的值创建一个新的pair对象,其元素类型分别是v1和v2的类型。
p1 < p2;                   // 两个pair对象间的小于运算,其定义遵循字典次序:如 p1.first < p2.first 或者 !(p2.first < p1.first) && (p1.second < p2.second) 则返回true。
p1 == p2;// 如果两个对象的first和second依次相等,则这两个对象相等;该运算使用元素的==操作符。
p1.first;                  // 返回对象p1中名为first的公有数据成员
p1.second;

//创建与初始化
pair<string, string> ob;          // 创建一个空对象ob,两个元素类型都是string
pair<string, int> a;           // 创建一个空对象 a, 两个元素类型分别是string和int类型
pair<string, vector<int> > b;    // 创建一个空对象b,两个元素类型分别是string和vector类型

//排序
//默认
pair<int,int>Item[n];    //定义pair对象数组Item[n]
sort(Item, Item+n);   //默认对Item的first的值进行排序
//自定义函数
bool cmp(pair<int, int>a, pair<int, int>b)
{
    return a.first<b.first;            //根据fisrt的值升序排序
} 
bool cmp(pair<int, int>a, pair<int, int>b)
{
    return a.second>b.second;//根据second的值升序排序
} 
sort(Item, Item+n, cmp);// 按照自定义的顺序进行排序

//自定义pair类型
typedef pair<int, int>P;

2 . tuple<T, T , T, ....> 返回两个及以上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <tuple>
//返回多个值的情况, 
std::tuple<Mat , int,Point , vector<double> > foo(Mat& img)
{   
    Mat A=img;
    int a=img.cols;
    Point B=Point(img.cols,img.rows);
    vector<double> b;

    unsigned int m=img.cols;
    unsigned int n=img.rows;
    for(unsigned int i=0;i<m;i++)
    {
        for(unsigned int j=0;j<n;j++)
        {
            b.push_back(img.at<double>(i,j));
        }
    }
    return std::make_tuple(A, a,B,b);
}

int main()
{   
    Mat img=imread("./1.png");
    std::tuple<Mat , int,Point , vector<double> > ss= foo(img);
    auto ss=foo(img);
    cout<<get<1>(ss)<<" "<<get<2>(ss).x<<" "<<get<3>(ss)[100]<<endl;
   
    //或者返回如下定义
   Mat A; int a; Point B; vector<double> b;
   tie(A,a,B,b)=foo(img);
   cout<<a<<" "<<B.x<<" "<<B.y<<endl;
    
    return 0;
}

补充tuple

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tuple(int,string) foo();
tie(a,b)=foo();
b.c_str();

//返回元素个数
std::tuple<int, double, std::string> t(64, 128.0, "Caroline");  
std::tuple<std::string, std::string, int> t2 =  
            std::make_tuple("Caroline", "Wendy", 1992)
size_t num = std::tuple_size<decltype(t)>::value;  
std::cout << "num = " << num << std::endl; 
 
  //获取第1个值的元素类型  
std::tuple_element<1, decltype(t)>::type cnt = std::get<1>(t);  
std::cout << "cnt = " << cnt << std::endl;   
  
 //比较  
 std::tuple<int, int> ti(24, 48);  
 std::tuple<double, double> td(28.0, 56.0);  
 bool b = (ti < td);  
 std::cout << "b = " << b << std::endl; 

3. 结构体

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Rect_Img
{
    Mat A;
    int a;
    Point B;
    vector<double> b;
};

Rect_Img Mul;

Rect_Img mul_R(Mat img)
{
    
    Mul.A=img;
    Mul.a=img.rows;
    Mul.B=Point(img.cols,img.rows);
    unsigned int m=img.cols;
    unsigned int n=img.rows;

    for(unsigned int i=0;i<m;i++)
    {
        for(unsigned int j=0;j<n;j++)
        {
            Mul.b.push_back(img.at<double>(i,j));
        }
    }
    return Mul;
}

int main()
{   
    Mat img=imread("./1.png");
    Rect_Img mull=mul_R(img);
    cout<<mull.a<<" "<<mull.B.x<<" "<<mull.B.y<<endl;
    return 0;
 }

4. 引用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void Mul_R(Mat& A,int& a,Point& B ,vector<double>& b,Mat& img)
{
    A=img;
    a=img.rows;
    B=Point(img.cols,img.rows);
    unsigned int m=img.cols;
    unsigned int n=img.rows;
    for(unsigned int i=0;i<m;i++)
    {
        for(unsigned int j=0;j<n;j++)
        {
            b.push_back(img.at<double>(i,j));
        }
    }
}

int main()
{   
    Mat A;int a;Point B ;vector<double> b;
   Mul_R( A, a,B , b,img);
   cout<<a<<" "<<B.x<<" "<<B.y<<endl;
     return 0;
 }

博主:菜鸟程序员

初衷:学习资料,程序设计,视觉算法,求职经验,工作心得

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出名企路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES13 中的 11 个惊人的 JavaScript 新特性
与许多其他编程语言一样,JavaScript 也在不断发展。每年,该语言都会通过新功能变得更强大,让开发人员编写更具表现力和简洁的代码。 让我们探索 ECMAScript 2022 (ES13) 中添加的最新功能,并查看它们的使用示例以更好地理解它们。 ◆ 1. 类字段声明 在 ES13 之前,类字段只能在构造函数中声明。与许多其他语言不同,我们不能在类的最外层范围内声明或定义它们。 class Car { constructor() { this.color = 'blue'; this.
IT大咖说
2022/08/26
7900
ES13 中的 11 个惊人的 JavaScript 新特性
ES6新特性
除此之外还有一个字符串模板,相当于加强版的字符串。用反引号``(之前我们字符串一直使用的是""),可以用来定义多行字符串,还可以在字符串中加入变量和表达式。
乐心湖
2020/07/31
7670
ES6新特性
ECMAScript13 中11个令人惊叹的 JavaScript 新特性
与许多其他编程语言一样,JavaScript 也在不断发展。每年,该语言都会通过新功能变得更加强大,使开发人员能够编写更具表现力和简洁的代码。 小编今天就为大家介绍ES13中添加的最新功能,并查看其用法示例以更好地理解它们。
葡萄城控件
2023/10/16
3000
ES6新特性
由于ES6在一些低版本的浏览器上无法运行,需转成ES5之前的版本兼容,以下有几种方案可以自动转换
jinghong
2020/05/09
1K0
ES6新特性
📚从ES7到ES12,了解JavaScript的新特性与语法演变
Array.prototype.includes 是一个用于判断数组是否包含特定元素的方法。它返回一个布尔值,表示数组中是否存在指定的值。
linwu
2023/07/27
4410
ES13的11个超赞的新属性
声明:本文为翻译文章,原文为11 Amazing New JavaScript Features in ES13
进击的大葱
2022/08/22
4080
ES7、ES8、ES9、ES10新特性大盘点
从 ECMAScript 2016(ES7)开始,版本发布变得更加频繁,每年发布一个新版本,好在每次版本的更新内容并不多,本文会细说这些新特性,尽可能和旧知识相关联,帮你迅速上手这些特性。
心莱科技雪雁
2019/12/11
2K0
ES7、ES8、ES9、ES10新特性大盘点
ES6新特性梳理汇总
在日常开发中,我的建议是全面拥抱let/const,一般的变量声明使用let关键字,而当声明一些配置项(类似接口地址,npm依赖包,分页器默认页数等一些一旦声明后就不会改变的变量)的时候可以使用const,来显式的告诉项目其他开发者,这个变量是不能改变的,同时也建议了解var关键字的缺陷(变量提升,污染全局变量等),这样才能更好的使用新语法
心念
2023/01/11
8740
10 个超有用的 JavaScript 技巧
众所周知,JavaScript 一直在迅速变化。新的 ES2020 引入了许多很棒的功能。你可以通过很多不同的方式去编写代码。他们会达到相同的目标,但其中一些会更短、更清晰。你可以凭借一些小技巧来使代码更清晰。这里列出的 JavaScript 开发技巧一定会对你有所帮助。
疯狂的技术宅
2020/06/06
8130
ES6/ES7/ES8/ES9/ES10常用特性和新特性
变量的改变,添加了块级作用域的概念 let声明变量(块级作用域),let是更完美的var,它声明的全局变量不是全局属性widow的变量,这便解决了for循环中变量覆盖的问题 const声明常量(会计作用域)
公众号---人生代码
2020/06/28
1.5K0
从ES6到ES10的新特性万字大总结(不得不收藏)
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会)在标准ECMA-262中定义的脚本语言规范。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,但实际上后两者是ECMA-262标准的实现和扩展。
陈大鱼头
2020/04/16
2.4K0
2022 年 JavaScript 从 ES6 到 ES12 新特性汇总
Javascript 是前端三剑客技术最重要的技能之一。每个学习前端的人,这个JavaScript技术是必须要学的。随着技术不断更新迭代,所以现在有一些新的知识来支持我们去学习 ES6 ~ ES12。
五月君
2022/12/12
1.5K0
2022 年 JavaScript 从 ES6 到 ES12 新特性汇总
常用ES6-ES10知识点总结
在工作中我们会常用到的一些es6-es10的一些特性还记得多少,今天就让我们重新复习一遍
小周sir
2020/02/14
6740
JavaScript 又出新特性了?来看看这篇就明白了
https://juejin.im/post/5ca2e1935188254416288eb2
崔庆才
2019/05/06
1.6K0
ES6 完全使用手册
在我们开发的时候,可能认为应该默认使用 let 而不是 var,这种情况下,对于需要写保护的变量要使用 const。
夜尽天明
2019/07/17
1.5K0
「建议收藏」送你一份精心总结的3万字ES6实用指南(下)
由于篇幅限制,所以将文章分成了 2 篇,这是下篇,包含了从 ES2016 到 ES2021 的所有知识。
用户4456933
2021/06/01
1.7K0
「建议收藏」送你一份精心总结的3万字ES6实用指南(下)
一文快速掌握 es6+新特性及核心语法
接下来我会总结一些工作中常用也比较核心的es6+的语法知识,后面又要慢慢开始工作之旅了,希望在总结自己经验的过程中大家会有所收获~
徐小夕
2019/10/08
9350
一文快速掌握 es6+新特性及核心语法
共享可变状态中出现的问题以及如何避免[每日前端夜话0xDB]
这里有两个独立的部分:函数logElements()和函数main()。后者想要在对数组进行排序的前后都打印其内容。但是它到用了 logElements() ,会导致数组被清空。所以 main() 会在A行输出一个空数组。
疯狂的技术宅
2019/11/03
1.7K0
Javascript的对象拷贝[每日前端夜话0x53]
翻译:疯狂的技术宅 原文:https://smalldata.tech/blog/2018/11/01/copying-objects-in-javascript
疯狂的技术宅
2019/05/06
5440
Javascript的对象拷贝[每日前端夜话0x53]
掌握现代JavaScript:ES7到ES12的新特性全解析!
一、Array.prototype.{flat, flatMap} 扁平化嵌套数组
代码天才TTT
2023/07/12
6320
掌握现代JavaScript:ES7到ES12的新特性全解析!
推荐阅读
相关推荐
ES13 中的 11 个惊人的 JavaScript 新特性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验