OpenCv未指定错误(该节点不代表用户对象(类型未知?))
OpenCv Unspecified error (The node does not represent a user object (unknown type?))
我正在使用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:builds2_4_PackSlave-win64-vc12-sharedopencvmodulescoresrcpersistence.cpp, line 4991
下面是我的加载代码:
CvHaarClassifierCascade *cascade;
cascade = (CvHaarClassifierCascade*)cvLoad("cascade-1.xml", 0, 0, 0);
正如我所说,它加载我的一个xml文件没有问题,但它给出了另一个文件的错误。非常感谢您的帮助。
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;
}
必须使用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()
相关文章:
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 如何允许用户在对象和类中输入?
- 在C++中,创建'n'数量的对象的推荐方法是什么,其中n是用户定义的。我该怎么做?
- 是否可以创建名称由用户写入的对象?
- 创建用户定义的复制构造函数时无法创建对象
- 如何使用构造函数声明指向用户定义对象的指针?
- cin 对象如何根据用户需要将字符转换为不同类型的字符?
- 将私有对象变量与用户输入的变量进行比较
- 如何将用户输入从控制台传递到不同线程中的对象 -> QTcpsocket
- 如果用户尝试从 JS 调用对象的未定义函数C++则回调C++代码
- C++阻止用户创建对象实例
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 使用用户的输入直接初始化对象的变量
- 为什么用户定义的转换不会在调用对象上隐式发生
- 用户创建的类对象实例化的未申请标识符
- 如何在用户定义类型的向量上使用 vector::p ush_back() 来仅修改一个对象?
- 有没有办法根据用户的输入访问类对象的信息?
- 通过用户输入到对象的指针的C 向量
- 编写安全包装类以管理用户定义对象的指针