首页 > 其他分享 >opencv高维数组-4维

opencv高维数组-4维

时间:2023-05-12 11:25:51浏览次数:37  
标签:size mat int opencv 数组 d1 CV 高维 Mat

转载:https://blog.csdn.net/weixin_41767419/article/details/116204595

创建高维数组

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(){    
    int p = 1;
    int q = 2;
    int t = 3;
    int u = 4;
    int sizes[] = {p,q,t,u};
    int all = p*q*t*u;
    float *d1 = new float[all];
    for(int i = 0; i < all; i++)
    {
        d1[i] = i * 1.0f;
    }
       
    Mat a = Mat(4, sizes, CV_32S, d1);

    int n, c, h, w, id;

    for (n = 0; n<p; n++){
        for (c=0; c<q; c++){
            for (h=0; h<t; h++){
                for (w=0; w<u; w++){
                    id = a.step[0] * n + a.step[1] * c + a.step[2] * h + w * a.step[3];
                    //cout << id << endl;
                    float *p = (float*)(a.data + id);
                    cout << *p << endl;
                }
            }
        }
    }
int dim = a.dims; // =4
int n = a.size[0]; // =p
    int c = a.size[1]; // =q
    int h = a.size[2]; // =t
    int w = a.size[3]; // =u
cout << "a.step[0] = " << a.step[0] << endl; cout << "a.step.p[0] = " << a.step.p[0] << endl; // 两者结果相同,都是96,意思为0维,一行有多少字节  cout << "a.step[1] = " << a.step[1] << endl; cout << "a.step.p[1] = " << a.step.p[1] << endl; cout << "a.step[2] = " << a.step[2] << endl; cout << "a.step[3] = " << a.step[3] << endl; cout << "a.size[0] = " << a.size[0] << endl; // 1 cout << "a.size[1] = " << a.size[1] << endl; // 2 cout << "a.size[2] = " << a.size[2] << endl; // 3 cout << "a.size[3] = " << a.size[3] << endl; // 4 cout << "a.cols = " << a.cols << endl; // 二维以上cols和rows都是-1 cout << "a.rows = " << a.rows << endl; return 0; }

创建高维图片数组

这样就可以引入多batch的图片

int main(){    
    int p = 1;
    int q = 2;
    int t = 2;
    // int u = 3;
    int sizes[] = {p,q,t};
// 3维

    int all = 3 * p*q*t;
// 这里 ×3, 因为每个元素是CV_8UC3
    unsigned char* d1 = new unsigned char[all];
    for(int i = 0; i < all; i++)
    {
        d1[i] = i;
        cout << (int)d1[i] << i << endl;
    }
       
    Mat a = Mat(3, sizes, CV_8UC3, d1);
// 这里是3维,因为每个元素都是CV_8UC3, 是3个数

    cout << "a.step[0] = " << a.step[0] << endl;
    cout << "a.step.p[0] = " << a.step.p[0] << endl;
    cout << "a.step[1] = " << a.step[1] << endl;
    cout << "a.step.p[1] = " << a.step.p[1] << endl;
    cout << "a.step[2] = " << a.step[2] << endl;
    // cout << "a.step[3] = " << a.step[3] << endl;
    cout << "a.size[0] = " << a.size[0] << endl;
    cout << "a.size[1] = " << a.size[1] << endl;
    cout << "a.size[2] = " << a.size[2] << endl;
    // cout << "a.size[3] = " << a.size[3] << endl;
    // cout << "a.cols = " << a.cols << endl;
    // cout << "a.rows = " << a.rows << endl;
    cout << "a.at<Vec3b>(0,1,1) = " << a.at<Vec3b>(0,1,1) << endl;
// 这里输出为 [9, 10, 11]

    return 0;
}

从现有mat, 建立子mat

int main(){
    float A[4][3] = { 0 };
    A[0][0] = 1.0f;
    A[1][0] = 2.0f;
    A[2][0] = 3.0f;
    A[3][0] = 4.0f;
    Mat A_mat = Mat(4, 3, CV_32F, A);
    
    Mat row1(1, 3, CV_32F, A_mat.ptr<float>(1));//获取第二行首地址
        Mat row1 = Mat(1, 3, CV_32F, A_mat.ptr<float>(1));
// 这两种初始化都可以

    auto p = A_mat.data;

    cout << (float)*p << endl;
// 0

    cout << row1.at<float>(0, 0) << endl;
// 2

    return 0;
}

 

标签:size,mat,int,opencv,数组,d1,CV,高维,Mat
From: https://www.cnblogs.com/hansjorn/p/17393449.html

相关文章

  • 找出数组的最大公约数
    给你一个整数数组nums,返回数组中最大数和最小数的最大公约数。两个数的 最大公约数是能够被两个数整除的最大正整数。示例1:输入:nums=[2,5,6,9,10]输出:2解释:nums中最小的数是2nums中最大的数是102和10的最大公约数是2示例2:输入:nums=[7,5,6,8,3]输......
  • OpenCV实现多目标追踪(2)
    目录1.预处理操作(1)给出深度学习分类的标签(2)读取网络模型(3)预处理视频流2.基于第一帧检测目标3.追踪目标4.效果展示5.多进程优化追踪器本文使用dlib库以及Caffe训练好的SSD模块对短视频流中的人进行目标追踪,并使用多线程进行优化。步骤:首先需要加载SSD分类标签并读取网......
  • java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组
    1.java代码中fastjson生成字符串和解析字符串的方法List<TemplateFull>templateFulls=newArrayList<TemplateFull>();JSONArrayjsonArr=newJSONArray();jsonArr.addAll(templateFulls);StringjsonStr=jsonArr.toJSONString();System.out.pr......
  • 1.删除排序数组中的重复项
    0.题目描述给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确保你的题解可以被通过:更改数组......
  • 删除数组A中与数组B的公共元素
    varA=[1,2,3,4,5,6,7];varB=[2,7]for(varn=0;n<B.length;n++){for(varm=0;m<A.length;m++){if(A[m]==B[n]){A.splice(m,1);m=m-1;}}}输出结果是:[1,3,4,5,6]关注我的公众号SpaceObj领取idea系列激活码......
  • java8 数组使用流和收集器格式化拼接数组中字符串并以“,”间隔,且首尾分别用 “[” 和
    方法:Stringresult=artist.stream().map(Art::getName).collect(Collectors.joining(",","[","]"));(注:joining(CharSequencedelimiter,CharSequenceprefix,CharSequencesuffix)方法接受一个字符串序列作为拼接符,并在拼接完成后添加传递的前缀和后缀。假如我们传递的分......
  • Java数组
    含义:数组是存储同一种数据类型多个元素的容器。数组既可以存储基本数据类型,也可以存储引用数据类型,分为一维数组和二维数组。一维数组:定义格式:格式 1 :数据类型 [] 数组名 ; (推荐的方式)格式 2 :数据类型 数组名 [];初始化:Java 中的数组必须先初始化 , 然后才能使用......
  • 两个数组间的距离值
    给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足|arr1[i]-arr2[j]|<=d。示例1:输入:arr1=[4,5,8],arr2=[10,9,1,8],d=2输出:2......
  • OpenCV实现多目标追踪(1)
    目录1.配置参数2.实例化追踪器3.处理视频的每一帧4.框选ROI并追踪本文利用OpenCV已有的七种目标追踪算法,通过对传入视频中感兴趣的目标对象进行框选,实现实时追踪框选对象。步骤:首先需要配置相应参数并创建MultiTracker对象,其次,读取并处理视频的每一帧,接着,框选ROI区域,然后,给M......
  • php数组和网址URL参数的互相转换
    前言接口调试和开发的过程中,相信很多小伙伴都会经常用到数组和url参数的相互转换来模拟请求。其实不用自己再通过foreach或implode之类的手动实现,php自身的函数库给我们提供了两个方法,完全够用:一、http_build_query将数据转换为URL参数格式,返回一个URL编码后的字符串。......