opencv openmp 人脸检测

时间:2022-01-02 15:19:56
在用openmp做并行的时候,测试几个小例子可以,
像下面这个例子莫名其妙的vs2013崩了
#include <iostream>
#include <omp.h>
#include <opencv2/nonfree/features2d.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include<opencv2/legacy/legacy.hpp> 
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/features2d/features2d.hpp"

int main(){
     cv::SurfFeatureDetector detector(400);  
 cv::SurfDescriptorExtractor extractor;
     cv::BruteForceMatcher<cv::L2<float> > matcher;
     std::vector< cv::DMatch > matches;
     cv::Mat im0, im1;
    std::vector<cv::KeyPoint> keypoints0, keypoints1;
     cv::Mat descriptors0, descriptors1;
     double t1 = omp_get_wtime();
 #pragma omp parallel sections
    {
 #pragma omp section
         {
             std::cout << "processing im0" << std::endl;
             im0 = cv::imread("rgb0.jpg", CV_LOAD_IMAGE_GRAYSCALE);
             detector.detect(im0, keypoints0);
             extractor.compute(im0, keypoints0, descriptors0);
             std::cout << "find " << keypoints0.size() << "keypoints in im0" << std::endl;
         }
 #pragma omp section
         {
             std::cout << "processing im1" << std::endl;
             im1 = cv::imread("rgb1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
             detector.detect(im1, keypoints1);
             extractor.compute(im1, keypoints1, descriptors1);
             std::cout << "find " << keypoints1.size() << "keypoints in im1" << std::endl;
        }
     }
     double t2 = omp_get_wtime();
     std::cout << "time: " << t2 - t1 << std::endl;
     matcher.match(descriptors0, descriptors1, matches);
     cv::Mat img_matches;
     cv::drawMatches(im0, keypoints0, im1, keypoints1, matches, img_matches);
     cv::namedWindow("Matches", CV_WINDOW_AUTOSIZE);
     cv::imshow("Matches", img_matches);
     cv::waitKey(0);
     return 1;
}

自己的代码也是崩 opencv openmp 人脸检测

3 个解决方案

#1


崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

#2


引用 1 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。


从调试状态进入,崩溃之后像上面那张图,没办法进入调试。

#3


选中断试试看。

#1


崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

#2


引用 1 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。


从调试状态进入,崩溃之后像上面那张图,没办法进入调试。

#3


选中断试试看。