1

cv::Mat から gpu::Mat に変換しようとすると問題が発生します。VS2012 Win7 x64 を使用しています。

これはコードです:

#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include <opencv2\gpu\gpu.hpp>
#include "cv.h"
#include "cxcore.h"
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>

using namespace cv;
using namespace cv::gpu;

int main () {

Mat src = cv::imread("pic1.jpg");
gpu::GpuMat d_src, d_dst;

d_src.upload(src);

gpu::bilateralFilter(d_src,d_dst, -1, 50, 7 );
gpu::Canny(d_dst, d_dst, 35, 200, 3);

Mat dst(d_dst);
imwrite("out.jpg", dst);
return 0;
}

同じファイルで他の関数が宣言されているため、非常に多くのインクルードを使用しています。

これは私が含めたlibファイルです:

opencv_core246d.lib
opencv_imgproc246d.lib
opencv_highgui246d.lib
opencv_ml246d.lib
opencv_video246d.lib
opencv_features2d246d.lib
opencv_calib3d246d.lib
opencv_objdetect246d.lib
opencv_contrib246d.lib
opencv_legacy246d.lib
opencv_flann246d.lib
opencv_nonfree246d.lib
opencv_photo246d.lib
opencv_stitching246d.lib
opencv_superres246d.lib
opencv_ts246d.lib

これは、コンパイルしようとすると得られるものです

First-chance exception at 0x000007FEFDD29E5D in CVtest.exe: Microsoft C++ exception:      cv::Exception at memory location 0x000000000025F8D0.
First-chance exception at 0x000007FEFDD29E5D in CVtest.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000000025F8D0.
Unhandled exception at at 0x000007FEFDD29E5D in CVtest.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000000025F8D0.
The program '[6592] CVtest.exe' has exited with code -1073741510 (0xc000013a).

Mat と gpuMat を切り替えようとすると表示されます。

どうすればこれを修正できますか?

4

1 に答える 1

2

I had the same issue when uploading / downloading on my Windows computer using the GPU module on OpenCV with VS2010. I was using the precompiled 2.4.6 binaries that you could download on the OpenCV site.

カードで CUDA+OpenGL が有効になっていることを確認する必要があります (CUDA が有効な GPU があると仮定します)。最初に実行する必要があるのは、実行することです (または、C だけを使用する場合は同等の機能を実行します)。

cout << cv::getBuildInformation() << endl;

これにより、OpenCV ビルドで有効にしたものと無効なものがわかります。多くの情報が出力されますが、「その他のサードパーティ ライブラリ」が出力される場所を探します。

Other third-party libraries:
    Use IPP:                     NO
    Use Eigen:                   NO
    Use TBB:                     NO
    Use OpenMP:                  NO
    Use GCD                      NO
    Use Concurrency              YES
    Use C=:                      NO
    Use Cuda:                    NO
    Use OpenCL:                  NO

Use Cuda および/または Use OpenCL の両方が NO である場合、アップロードやダウンロードなどの GPU 関数を呼び出すたびにプログラムがクラッシュします。

それを解決するには、これらのテクノロジーを有効にして OpenCV をコンパイルする必要があります。Windows の場合、次のガイドに従いました。

http://www.programmerfish.com/how-to-build-opencv-2-4-6-with-gpu-module-in-windows/#.UpuDQcRLNBm

OpenGL と CUDA をサポートする 2.4.7 バージョンをコンパイルした後、すべてが問題なく動作しました。

于 2013-12-01T18:45:17.437 に答える