c++ - OpenCV cv::dnn::Net::getBlob 返回 dnn::Blob::matRefConst 有 rows == -1 和 cols == -1

标签 c++ opencv blob caffe proto

屏幕截图:getBlob 返回的错误结果:

image here

这里是附加代码:

resize(img, img, Size(224, 224));

dnn::Blob inputBlob = dnn::Blob::fromImages(img); 
net.setBlob(".data", inputBlob); 
net.forward(); 
dnn::Blob prob = net.getBlob( "loss1"/*"prob"*/); 

和原型(prototype)文件: # 名称:“nin_imagenet” # 与 caffe 的 prototxt 相比,接下来的五行发生了变化 # 我删除了有 top: "data" 的图层 input: "data"# 输入名称 input_dim: 1 # 批量大小
input_dim: 3 # channel 数 input_dim: 224 # 宽度 input_dim: 224 # 高度

# unchaged text
# ...

# another changed compared to caffe's prototxt
# i delete layers who has **bottom: "label"**  
layers {
  name: "loss1"
  type: SOFTMAX
  bottom: "fc81"
  top: "loss1"
}
# changed below

最佳答案

我认为这是因为你处理的是 4D blob,而不是矩阵,大小存储在大小数组中(见下面的例子)。 尝试使用此代码片段提取平面:

//-------------------------------------------------------
// Extract plane with defined n and c from nchw blob
//-------------------------------------------------------
void mtcnn::extractPlane(Mat &src, int n, int ch, Mat &dst)
{
    const int rows = src.size[2];
    const int cols = src.size[3];
    dst = cv::Mat::zeros(rows, cols, CV_32FC1);

    for (int row = 0; row < rows; row++)
    {
        const float *ptrsrc = src.ptr<float>(n, ch, row);
        float *ptrdst = dst.ptr<float>(row);
        for (int col = 0; col < cols; col++)
        {
            ptrdst[col] = ptrsrc[col];
        }
    }
} 

希望你使用这样的东西来设置输入数据:

        inputBlob = blobFromImage(img, 0.0078125, Size(ws, hs), Scalar(127.5, 127.5, 127.5)); //Convert Mat to batch of images
        p_net.setInput(inputBlob, "data"); //set the network input

关于c++ - OpenCV cv::dnn::Net::getBlob 返回 dnn::Blob::matRefConst 有 rows == -1 和 cols == -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48617005/

相关文章:

windows - 访问存储在 Windows Azure BLOB 上的文本文件

c++ - 将头文件迁移到配置文件

c++ - RTTI 行为未按预期出现

c++ - 使用 STL 算法的命名空间和用户定义的运算符

android - 适用于 Android 5.0 及更高版本的 OpenCV native 相机库?

OpenCV 如何在 JAVA 中用二维数组初始化 Mat

javascript - 将 base64 字符串转换为 blob 后文件名无效

c++ - 如何调试 WebKit2GTK+ 扩展

opencv - Eclipse安装opencv 2.4.3库时出错

jsf - 如何将 Part 转换为 Blob,以便将其存储在 MySQL 中?