C++vector<vector<double>> and opencv Mat

本文详细介绍了如何在C++中实现离散小波变换,并通过Mat数据类型进行矩阵操作。同时,文章提供了从Mat数据类型转换至vector<vector<double>>的方法,以及反向转换的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在写Opencv程序,用到离散小波变换,但Opencv没有提供离散小波变换函数。但找到了离散小波变换函数的C++程序,发现在C++中,可以用 vector<vector<double>> 来表示矩阵。

int Height = 200;
int Width = 400;
vector<vector<double>> signal2(Height,Width);   
cout<<"矩阵的行数"<<signal2.size()<<endl;
cout<<"矩阵的列数"<<signal2[0].size()<<endl;

vector<vector<double>>与Mat数据类型可以进行转换

//Mat 转换为vector<vector<double>>
void Mat2vector(Mat &src,vector<vector<double>> &dst)
{  
    assert( src.rows== dst.size());
    MatIterator_<double> it, it2;
                it = src.begin<double>();
                it2 = src.end<double>();
    for(int i=0;i<src.rows;i++)
    {
        for(int j=0;j<src.cols;j++)
        {
          dst[i][j]=*it++;
        }
    }
}
//vector<vector<double>> 转换为Mat
 void Vector2Mat(vector<vector<double>>src,Mat dst)
 {
     assert( dst.rows== src.size());
     MatIterator_<double> it = dst.begin<double>();        
     for(int i=0;i<src.size();i++)
     {
         for(int j=0;j<src[0].size();j++)
         {
           *it=src[i][j];
            it++;
         }
     }
 }

 

“<a href="#" class="toolbar_item command_copyCode copyCode">复制代码 <table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 </td><td class="code"><code class="java plain">#include <iostream> <code class="java plain">using namespace std; <code class="java plain">#include<stack> <code class="java plain">#include<vector> <code class="java keyword">int <code class="java plain">main() { <code class="java spaces"> <code class="java keyword">int <code class="java plain">m,n; <code class="java spaces"> <code class="java plain">cin>>m>>n; <code class="java spaces"> <code class="java plain">stack<vector<<code class="java keyword">char<code class="java plain">>>ch; <code class="java spaces"> <code class="java keyword">for<code class="java plain">(<code class="java keyword">int <code class="java plain">i=<code class="java value">0<code class="java plain">;i<m;i++) {=<code class="java string">"" <code class="java plain">vector<<code class="java keyword">char<code class="java plain">=<code class="java string">""<code class="java plain">>a(n, <code class="java string">'\0'<code class="java plain">); <code class="java spaces"> <code class="java keyword">for <code class="java plain">(<code class="java keyword">int <code class="java plain">j = <code class="java value">0<code class="java plain">; j < n; j++) <code class="java spaces"> <code class="java plain">{ <code class="java spaces"> <code class="java plain">cin >> a[j]; <code class="java spaces"> <code class="java plain">} <code class="java spaces"> <code class="java plain">ch.push(a); <code class="java spaces"> <code class="java plain">} <code class="java spaces"> <code class="java keyword">while<code class="java plain">(!ch.empty()) <code class="java spaces"> <code class="java plain">{ <code class="java spaces"> <code class="java plain">vector<<code class="java keyword">char<code class="java plain">>b=ch.top(); <code class="java spaces"> <code class="java plain">ch.pop(); <code class="java spaces"> <code class="java keyword">for<code class="java plain">(vector<<code class="java keyword">char<code class="java plain">>::reverse_iterator it=b.rbegin();it!=b.rend();it++) <code class="java spaces"> <code class="java plain">cout<<*it; <code class="java spaces"> <code class="java plain">cout<<endl; }=<code class="java string">"" <code class="java value">64<code class="java plain">=<code class="java string">"" <code class="java plain">位输出请用=<code class="java string">"" <code class="java plain">printf(<code class="java string">"%lld"<code class="java plain">)<=<code class="java string">"" <code class="java plain">pre=<code class="java string">""<code class="java plain">></endl;></<code class="java keyword">char<code class="java plain">></<code class="java keyword">char<code class="java plain">></m;i++)></vector<<code class="java keyword">char<code class="java plain">></vector></stack></iostream> </code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></td></tr></tbody> </table></a>”给我翻译成C++语言
07-16
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值