ncnn: 读取二维数据

该代码示例展示了如何利用ncnn库进行二维数据的读取和处理,加载预训练模型进行年龄检测。它首先从文件中读取61x37的数据矩阵,然后将数据转换为ncnn::Mat对象输入模型进行预测。模型参数和模型权重分别从Simple_sim_opt.param和Simple_sim_opt.bin加载。
摘要由CSDN通过智能技术生成

Mat类型变量读取二维数据:

#include "net.h"
#include <fstream>
#include <iostream>
#include <chrono>
#include <stdio.h>
#include <vector>
#if defined(USE_NCNN_SIMPLEOCV)
#include "simpleocv.h"
#endif
using namespace std;

struct Object
{
    int label;
    float prob;
};

static int detect_age(std::vector<Object>& objects)
{

    ncnn::Net age;
//    age.opt.use_vulkan_compute = true;
    if (age.load_param("Simple_sim_opt.param"))
        exit(-1);
    if (age.load_model("Simple_sim_opt.bin"))
        exit(-1);

    float data[61][37] = { 0 };
    ifstream infile;
    infile.open("/home/1.txt");

    for (int i = 0; i < 61; i++){
        for (int j = 0; j < 37; j++){
            infile >> data[i][j];
        }
    }
    infile.close();

    // 存储数据:
    ncnn::Mat m(37,61);
    std::copy(data[0],data[61],(float *)m);

    ncnn::Extractor ex = age.create_extractor();
    ex.input("input", m);
    ncnn::Mat out;
    ex.extract("output", out);
    for (int i = 0; i < out.total(); ++i){
        std::cout<< out[i] << std::endl;
    }
    objects.clear();

    return 0;
}

int main()
{

//    test();
    std::vector<Object> objects;
    detect_age(objects);

    return 0;
}

直接用 ncnn::Mat m(37, 61, data[0]) 就可以了,不需要 std::copy

确保 m 在使用的时候, data 还是 alive 的 

看起来这里有一个错误的信息,因为 `ncnn::Mat` 类型并没有直接提供一个名为 `format` 的成员变量。`ncnn::DataFormat` 是 NCNN(Neural Computation Network)框架用于描述数据布局的一种枚举类型,比如常见的 `f32` 表示单精度浮点数(32位)。如果这句话是在尝试设定 `ncnn_processed_image` 的数据格式,那可能是想间接指定矩阵内数据的存储方式或数据类型的转化。 假设你想要确保 `ncnn_processed_image` 的数据是以单精度浮点数 (fp32) 存储,可能需要先检查原始 `processed_image` 的数据类型并转换,然后再创建 `ncnn::Mat`。例如,如果你已经确认 `processed_image` 是 `uchar4`(四个字节的无符号字符,通常用于表示像素的RGBA值),那么你需要将其转换为 fp32 格式,如下所示: ```cpp if (processed_image.type() == CV_8UC4) { cv::Mat temp(processed_image.size(), CV_32FC4); cv::cvtColor(processed_image, temp, cv::COLOR_RGBA2BGRA); // 将RGBA转换为BGRA,再转为fp32 ncnn::Mat ncnn_temp(temp.size(), ncnn::DataType::f32); memcpy(ncnn_temp.data, temp.ptr<float>(), sizeof(float) * temp.total()); ncnn_processed_image = ncnn_temp; } ``` 在这个例子中,`temp` 是临时 `cv::Mat` 用于转换数据,而 `ncnn_temp` 是最终的 NCNN 可接受的 `ncnn::Mat`。然后才设置了 `ncnn_processed_image` 作为 fp32 格式。 请注意,这里的代码并不是NCNN官方提供的,实际情况可能会依赖于NCNN的具体接口和库函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值