【发布时间】:2014-12-17 16:18:45
【问题描述】:
输入图像是imageA。我想将中间的 1/3 数据(imageB)复制到 opencl 缓冲区中。
我使用 clEnqueueWriteBuffer 函数。(我使用缓冲区而不是图像)
clEnqueueWriteBuffer(queue,
cl_buffer_input, // opencl buffer
1,
0, // NOW offset is 0
WIDTH_IMAGE*(HEIGHT_IMAGE/3))*COLOR_IMAGE_CHANNEL*sizeof(cl_uchar),//1/3 image height
(void*)(image_input.data), // input data
0, 0, NULL);
之后,我复制的缓冲区是图像C的数据。
所以我想用偏移量来复制图片B。
我使用的代码是
clEnqueueWriteBuffer(queue,
cl_buffer_input, // opencl buffer
1,
(HEIGHT_IMAGE/3))*COLOR_IMAGE_CHANNEL*sizeof(cl_uchar), // NOW offset is the offset of data
WIDTH_IMAGE*(HEIGHT_IMAGE/3))*COLOR_IMAGE_CHANNEL*sizeof(cl_uchar),//1/3 image height
(void*)(image_input.data), // input data
0, 0, NULL);
但结果无法更新!即使我把offset改成1,结果也是静止的。(视频中的新帧数据不能上传,结果只有第一帧,位置和图片C一样)。
所以我改变了图像数据的起始指针,让偏移量为0
新的代码是这样的:
clEnqueueWriteBuffer(queue,
cl_buffer_input, // opencl buffer
1,
0, // NOW offset is the offset of data
WIDTH_IMAGE*(HEIGHT_IMAGE/3))*COLOR_IMAGE_CHANNEL*sizeof(cl_uchar),//1/3 image height
(void*)(image_input.data+(HEIGHT_IMAGE/3))*COLOR_IMAGE_CHANNEL), // input data's pointer changed
0, 0, NULL);
而且...新结果就像 imageD! 它只有X线的偏移量。
那么...我该怎么做才能将图像的中间 1/3 数据复制到 opencl 缓冲区中? 谢谢~
【问题讨论】:
标签: c image opencv buffer opencl