因此,我正处于实现SIFT的中间阶段,事实是我不知道如何处理OpenCV中的 channel 。到目前为止,这是我所做的。

#ifndef QUANTIZATION_DATABASE_DATA_READ_H
#define QUANTIZATION_DATABASE_DATA_READ_H
// C HEADERS
#include <stdlib.h>
#include <fcntl.h>
// C++ HEADERS
#include <iostream>
#include <string>
// OPENCV HEADERS
#include <opencv2/opencv.hpp>

namespace cv
{
    class DataReader
    {
    public:

        explicit DataReader(int _flags) : flags(_flags)
        {

        }

        void read(std::string filename, const char *key, Mat &res)
        {
            try
            {
                FileStorage fs(filename, FileStorage::Mode::FORMAT_XML | FileStorage::Mode::READ);
                fs[key] >> res;
                fs.release();
            }
            catch (Exception e)
            {
                std::cerr << e.msg << std::endl;
            }

        }

    private:
        int flags;
    };
}

我要实现的算法如下。
  • 从xml文件读取4维矩阵(NHWC)。
  • 将其存储在矩阵
  • 将其转换为NHWC

  • 问题是,当我使用Tensorflow进行一些操作时,我不必执行步骤3。它只是自动知道最后一个尺寸是通道。所以我该怎么做?

    最佳答案

    似乎根本无法为一批图像制作4维缓冲区。因此,我决定更改xml文件的格式,它的工作原理很吸引人。

    以下是暂时解决此问题的方法。

    #ifndef QUANTIZATION_DATABASE_DATA_READ_H
    #define QUANTIZATION_DATABASE_DATA_READ_H
    // C HEADERS
    #include <stdlib.h>
    #include <fcntl.h>
    // C++ HEADERS
    #include <iostream>
    #include <string>
    // OPENCV HEADERS
    #include <opencv2/opencv.hpp>
    
    namespace cv
    {
        class DataReader
        {
        public:
    
            explicit DataReader(int _flags) : flags(_flags)
            {
    
            }
    
            void read(std::string filename, Mat &res)
            {
                try
                {
                    float length = 0;
    
                    FileStorage fs(filename, FileStorage::Mode::FORMAT_XML | FileStorage::Mode::READ);
    
                    fs["size"] >> length;
                    for (int i = 0; i < (int)length; ++i) {
                        std::string key("image");
                        std::string index = std::to_string(i);
                        Mat image;
    
                        key = key + index;
                        fs[key.c_str()] >> image;
                        std::cout << image.channels() << std::endl;
                        res.push_back(image);
                    }
    
                    fs.release();
                }
                catch (Exception e)
                {
                    std::cerr << e.msg << std::endl;
                }
    
            }
    
        private:
            int flags;
        };
    }
    

    关于c++ - 如何在OpenCV中将4维矩阵转换为NHWC格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50909619/

    10-10 18:12