c++ - 错误:(-215:断言失败)m.dims <= 2 in function 'FormattedImpl' in cv::dnn

标签 c++ opencv deep-learning object-detection opencv4

我正在使用以下代码在 opencv dnn 模块中加载预训练的 TensorFlow 模型 -

cv::dnn::Net net = cv::dnn::readNetFromTensorflow("frozen_inference_graph.pb",
                                                   "graph.pbtxt");

net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA); //Run model on GPU
net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);

Mat image = imread("img.jpeg");
Mat resized;
cv::resize(image, resized, cv::Size(300, 300));
cout<<resized.size()<<endl;
cout<<"Resized"<<endl;
auto input_image = dnn::blobFromImage(image, 1.0, cv::Size(300, 300),
                                      cv::Scalar(127.5, 127.5, 127.5),
                                      false, false, CV_32F);
cout<<"Now setting Input";
net.setInput(input_image);
auto detections = net.forward();
cout<<detections;
return 0;
但是,我收到问题中提到的以下错误-
what():  OpenCV(4.4.0) /home/atharva/opencv-4.4.0/modules/core/src/out.cpp:87: error: (-215:Assertion failed) m.dims <= 2 in function 'FormattedImpl'
有人可以指出错误是什么吗?我相信 BlobFromImage 中存在一些问题,因为它在打印后什么都没有。

TIA

最佳答案

出现此错误是因为您试图打印 cv::Mat到具有超过 2 维的标准输出。与 cv::dnn , 使用 net.forward() 后的输出是 4 维的。但是我不知道您使用的是什么模型,因为 blob 的输出结构因您尝试执行的任务而异。如果我不得不猜测您正在根据您选择的变量名称进行某种对象检测。在这种情况下,通常第一个维度是批量大小,由于您只使用一个图像,因此批量大小为 1。第二个维度是输出中的 channel 数。当您在图像上进行对象检测时,它的大小也是 1。第三和第四维是最终输出层的行数和列数。
相信,您可以提取此 cv::Mat 的 2D 版本通过执行以下操作打印到标准输出:

cv::Mat output(detections.size[2], detections.size[3], CV_32F, detection.ptr<float>());
现在这是一个 2D 矩阵,您可以通过 std::cout << output << std::endl; 打印出来。 .

关于c++ - 错误:(-215:断言失败)m.dims <= 2 in function 'FormattedImpl' in cv::dnn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63573424/

相关文章:

python - tensorflow : optimizer gives nan as ouput

image-processing - 使用 SMOTE 对图像数据进行过采样

c++ - std::vector - 如何释放 vector 中 char* 元素的内存?

C++ 'no matching function for call to' 和 'no known conversion for argument'

android - 我可以从我的 apk 中删除哪个 libopencv_java3.so?

opencv - SIFT特征提取器

c++ - QAbstractItemModel 中的嵌套操作

c++ - 插入卡在运行时的 unordered_map

c++ - 将 Mat 压缩成 Jpeg 并将结果存入内存

python - 如何在Python中对段落列表进行分词?