我正在使用OpenCV和CascadeClassifier::detectMultiScale面部检测.我的问题是它似乎导致输出中的内存损坏vector<Rect>.向量使用Rects正确填充,但在释放向量时会导致崩溃.
这仅在编译Debug构建时发生.错误消息是Debug Assertion Failed,这让我想知道在Release版本中是否也存在问题,并且不会检查断言.
这可能是OpenCV的错误吗?或者只是我在处理我的载体时做错了什么?
以下代码段显示了重现错误的示例代码:
#include <opencv2/opencv.hpp>
using namespace cv;
int main(array<System::String ^> ^args)
{
VideoCapture video(0);
Mat frame;
CascadeClassifier classifier("haarcascade_frontalface_default.xml");
while (waitKey(1000 / 30) != 'q')
{
video >> frame;
vector<Rect> faces;
classifier.detectMultiScale(frame, faces);
for (int i = 0; i < faces.size(); i++)
rectangle(frame, faces[i], Scalar(255, 255, 255));
imshow("Camera", frame);
} // <<< The crash occurs here when the faces vector is released
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
调试断言失败!
程序:MyProgram.exe文件:minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp行:892
表达式:is_block_type_valid(header - > _ block_use)
小智 4
我也有同样的问题。我通过向函数传递一个取消引用的全局指针来解决这个问题。
IE
std::vector<cv::Rect>* faces = nullptr;
void init()
{
faces = new std::vector<cv::Rect>; //never call delete whatever you do
}
void findSomeFaces()
{
cascade->detectMultiScale(image_source, *faces);
}
Run Code Online (Sandbox Code Playgroud)