我在模块ocl中使用OpenCv实现HOG算法时遇到问题。 问题不在于探测器的输出,而在于主方法的返回。也就是说,我可以编译并运行应用程序并获得结果,但是当应用程序存在时,它会因分段错误而崩溃。 我使用的是用mingw编译的opencv 2.4.8版,但是这个问题在其他opencv版本上仍然存在。
以下是给我报告问题的代码的极简主义示例:
int main()
{
cv::ocl::DevicesInfo devices;
cv::ocl::getOpenCLDevices(devices);
cv::ocl::setDevice(devices[0]);
cv::ocl::HOGDescriptor desc;
desc.setSVMDetector(cv::ocl::HOGDescriptor::getDefaultPeopleDetector());
cv::Mat t_img = cv::imread("view.png");
std::vector<cv::Rect> hoghypothesis;
cv::ocl::oclMat cleanImgGpu;
cv::cvtColor(t_img, t_img, CV_BGR2BGRA);
cleanImgGpu.upload(t_img);
desc.detectMultiScale(cleanImgGpu, hoghypothesis, 0.09, cv::Size(8,8), cv::Size(0,0), 1.2, 0.0);
for(unsigned int pl = 0; pl < hoghypothesis.size(); pl++)
cv::rectangle(t_img, hoghypothesis.at(pl), cv::Scalar(255,255,255),2);
cv::resize(t_img, t_img, cv::Size(1366,768));
cv::namedWindow("origFrame",1);
cv::imshow("origFrame", t_img);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
谢谢,Américo。
其他信息: 当我正常运行程序时,它给了我一个appcrash这个信息:
Problem signature:
Problem Event Name: APPCRASH
Application Name: OpenCLTests.exe
Application Version: 0.0.0.0
Application Timestamp: 00000000
Fault Module Name: ntdll.dll
Fault Module Version: 6.1.7601.18229
Fault Module Timestamp: 51fb164a
Exception Code: c0000005
Exception Offset: 0000000000019a8a
OS Version: 6.1.7601.2.1.0.256.48
Locale ID: 2070
Additional Information 1: 9646
Additional Information 2: 9646f69d7d90104bc2f332551ea877c7
Additional Information 3: 0f02
Additional Information 4: 0f02418e0eb39adff911c83cce610af7
在调试模式下,它只给我一个SIGSEGV信号。它甚至不是例外,所以我无法尝试/捕获它。