0

この疑似コードのように、独自のカーネルをメディアン フィルターに実装しようとしました。

//main.cpp
#include "opencv2/opencv.hpp"
cv::Mat inputMat = cv::imread()
cudaMedianCaller (inputMat, kernelMat)

//medianFilter.h
#include "opencv2/opencv.hpp"
cudaMedianCaller (const cv::Mat& inputMat, cv::Mat& kernelMat);

//medianFilter.cu
cudaMedianCaller (const cv::Mat& inputMat, cv::Mat& kernelMat)
{
    kernelMedianFilter<<< , >>> (uchar3* d_inputMat, uchar* d_kernelMat)
}

__global__ void kernelMedianFilter (uchar3* d_inputMat, uchar* d_kernelMat)
{

}

コンパイルエラーが発生します:

C1083: インクルード ファイルを開けません: 'opencv2/opencv.hpp': そのようなファイルまたはディレクトリはありません

.cu ファイルが nvcc でコンパイルされ、OpenCV ヘッダー ファイルをコンパイルできないことはわかっています。

1) OpenCV3.1.0 ライブラリを .cu ファイルに含めるにはどうすればよいですか?

4

2 に答える 2

2

.cu ファイルに OpenCV を含める必要はありません。生のポインターと基本的なデータ型をパラメーターとして持つ Caller API が必要です。

main.cpp

#include "opencv2/opencv.hpp"
#include "medianFilter.h"

int main() {
  cv::Mat inputMat = cv::imread();
  .....
  cudaMedianCaller (d_inputMat, d_kernelMat);
  .....
  return 0;
}

medianFilter.h

cudaMedianCaller (uchar3* d_inputMat, uchar* d_kernelMat);

medianFilter.cu

cudaMedianCaller (uchar3* d_inputMat, uchar* d_kernelMat)
{
    kernelMedianFilter<<< , >>> (uchar3* d_inputMat, uchar* d_kernelMat)
}

__global__ void kernelMedianFilter (uchar3* d_inputMat, uchar* _kernelMat)
{

}
于 2016-07-04T13:34:08.990 に答える