1

TBB を使用して、OpenCV を使用するコンピューター ビジョン プロジェクトのパフォーマンスを向上させようとしています。これは、アクセス違反を与えるコードの部分です。

#include <opencv/cv.h>
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "tbb/pipeline.h"
#include "tbb/tick_count.h"
#include "tbb/task_scheduler_init.h"
#include "tbb/tbb_allocator.h"
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
    string file = "myimage.jpg";
    Mat* mats2=tbb::tbb_allocator<Mat>().allocate(100);
    for (int i = 0 ; i < 100 ; ++i)
    {
        mats2[i]=imread(file);         <===== Access Violation
        imshow("temp",mats3[i]);
        waitKey(1);
    }
}

なぜこれがアクセス違反なのですか? Mats2 は 0 ではなく、確実にメモリ内のアドレスに割り当てられています。このリンクから使用できる他の関数を知っていますが、このエラーにつながる tbb_allocator で何が起こるか知りたいです。mallocまたはscalable_mallocと一緒に使用すると、コードはエラーになりません。

4

2 に答える 2

0

どうやら、これは C-C++ の問題です。新規および削除は機能しましたが、それでもスケーラブルな割り当てによりアクセス違反が発生します。現在、OpenCV ユーザーにとって唯一のオプションのように思えます。

于 2013-07-04T09:32:26.940 に答える