0

私は OpenCL を使用して画像処理アルゴリズムを実装しようとしているので、OpenCV で作業することをお勧めします。

私は次のものを持っています:

cv::Mat image = cv::imread("lena.bmp");
width = image.rows;
height = image.cols;

char *buffer = reinterpret_cast<char *>(image.data);

cl::Image2D clImage(context,
                        CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                        cl::ImageFormat(CL_RGBA, CL_UNORM_INT8),
                        width,
                        height,
                        0,
                        buffer);

return clImage;

しかし、プログラムを実行すると、セグメンテーション違反が発生します。

Segmentation fault (core dumped)

私は OpenCL プログラミング ガイドのソース コードを読んでいて、テストした非常によく似たコードを実装しており、正常に動作しますが、freeimage を使用しています。

char *buffer = new char[width * height * 4];
memcpy(buffer, FreeImage_GetBits(image), width * height * 4);

FreeImage_Unload(image);

// Create OpenCL image
cl_image_format clImageFormat;
clImageFormat.image_channel_order = CL_RGBA;
clImageFormat.image_channel_data_type = CL_UNORM_INT8;

cl_int errNum;
cl_mem clImage;
clImage = clCreateImage2D(context,
                        CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                        &clImageFormat,
                        width,
                        height,
                        0,
                        buffer,
                        &errNum);

だから問題は何ですか?どうすれば解決できますか?

4

1 に答える 1

0

@sbabbi のおかげで、次のことができることに気付きました。

cv::Mat image = cv::imread("lena.bmp", CV_LOAD_IMAGE_COLOR);
cv::Mat imageRGBA;

width = image.rows;
height = image.cols;

cv::cvtColor(image, imageRGBA, CV_BGR2RGBA);
char *buffer = reinterpret_cast<char *>(imageRGBA.data);

cl::Image2D clImage(context,
                        CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                        cl::ImageFormat(CL_RGBA, CL_UNORM_INT8),
                        width,
                        height,
                        0,
                        buffer);

return clImage;
于 2013-09-08T18:59:09.970 に答える