OpenCv Unspecified 错误(节点不代表用户对象(未知类型?))

Posted

技术标签:

【中文标题】OpenCv Unspecified 错误(节点不代表用户对象(未知类型?))【英文标题】:OpenCv Unspecified error (The node does not represent a user object (unknown type?)) 【发布时间】:2016-08-31 19:48:34 【问题描述】:

我正在使用 openCV 2.4.10 并尝试实现类似这里的东西:

https://github.com/andrewssobral/vehicle_detection_haarcascades

我已经生成了类似上述项目的 cars.xml 的文件,但是当我尝试加载其中一个时,出现以下错误:

OpenCV Error: Unspecified error (The node does not represent a user object (unknown type?)) in cvRead, file C:\builds\2_4_PackSlave-win64-vc12-shared\opencv\modules\core\src\persistence.cpp, line 4991

这是我的加载代码:

CvHaarClassifierCascade *cascade;
cascade = (CvHaarClassifierCascade*)cvLoad("cascade-1.xml", 0, 0, 0);

正如我所说,它毫无问题地加载了我的一个 xml 文件,但它在另一个文件上给出了该错误。非常感谢您的帮助。

【问题讨论】:

你能发布一个工作和不工作的 xml 文件(如果不是太大的话) @Jean-FrançoisFabre 工作:my.pcloud.com/publink/… 不工作:my.pcloud.com/publink/… 【参考方案1】:

OpenCV 2.4 文档建议使用 CascadeClassifier 类。它成功加载了您的cascade1.xml 文件。以下是在 C++ 中使用 CascadeClassifier 的方法:

#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include <iostream>

using namespace cv;

int main()

  CascadeClassifier cascade;
  if( !cascade.load( "d:\\OpenCV\\cascade1.xml" ) )
   
    std::cout << "Error during loading";
    return -1; 
  

  Mat pic = imread("d:\\Samples\\Cars\\test.jpg");

  Mat picGray;
  cvtColor( pic, picGray, CV_BGR2GRAY );

  std::vector<Rect> objs;
  cascade.detectMultiScale( picGray, objs, 1.1, 2, 0, Size(0, 0) );

  return 0;

【讨论】:

【参考方案2】:

您必须使用 CvHaarClassifierCascade 类型的不同变量来加载不同的 xml 文件,并使用它们执行不同的检测。

就您的 xml 文件而言,两者都工作正常,您可以通过下面的 python 代码进行检查。

import cv2
a=cv2.CascadeClassifier('cascade1.xml')
b=cv2.CascadeClassifier('cars.xml')
img=cv2.imread('car.jpg')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cars_carcode=a.detectMultiScale(gray,1.3,5)
cars_car=b.detectMultiScale(gray,1.3,5)

def car(cars):
    cars=a.detectMultiScale(gray,1.3,5)
    for (x,y,w,h) in cars:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray=gray[y:y+h,x:x+w]
        roi_color=img[y:y+h,x:x+w]

    return (gray,img)

cv2.imshow('Cars Detected by carcode1.xml',car(cars_carcode)[1] )
cv2.imshow('Cars Detected by cars.xml',car(cars_car)[1] )   
cv2.waitKey(0)
cv2.destroyAllWindows()

【讨论】:

好的,它可以工作,但是我在cpp中需要它,而不是python,而且我没有同时使用它们,我每次只加载一个来使用。 你提供的代码也有问题,具体在car函数中 @Abhishek 。我什至无法加载我的 xml 文件。为此该怎么办? xml是我自己训练的。

以上是关于OpenCv Unspecified 错误(节点不代表用户对象(未知类型?))的主要内容,如果未能解决你的问题,请参考以下文章

An unspecified error occurred!

nullable,nonnull, null_resettable以及_Null_unspecified的区别和使用

运行测试用例文件时出现依赖错误

使用支持 CUDA 的 OpenCV 编译 ROS 节点时不支持 CUDA

unspecified 适用范围,解决问题现象

unspecified 适用范围,解决问题现象