gpt4 book ai didi

c - (OpenCL+OpenCV) 如何使用clEnqueueWriteBuffer的偏移量?

转载 作者:行者123 更新时间:2023-11-30 15:28:39 26 4
gpt4 key购买 nike

enter image description here

输入图像是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);

但是结果无法更新!即使我把偏移量改成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 缓冲区中?谢谢~

最佳答案

你没有得到任何奇怪的东西,你运行的代码的结果是好的。但是,如果你想复制B部分,你需要这段代码:

clEnqueueWriteBuffer(queue, 
cl_buffer_input, // opencl buffer
CL_TRUE, //Blocking?
0, // No offset inside the buffer (the image will start at 0 inside the cl_buffer)
WIDTH_IMAGE*(HEIGHT_IMAGE/3))*COLOR_IMAGE_CHANNEL*sizeof(cl_uchar),//Copy only 1/3 of image size
(void*)(image_input.data+WIDTH_IMAGE*(HEIGHT_IMAGE/3))*COLOR_IMAGE_CHANNEL), // Offset the input data by 1/3 as well (the first data to copy is at 1/3 inside the array)
0, 0, NULL);

详细说明:您需要复制图像的1/3,因此大小为1/3。缓冲区偏移量为 0,因为您不想将图像写入缓冲区的末尾,而是写入缓冲区的开头。并且要复制数据的 ptr 的偏移量必须为图像的 1/3。这样您就可以将指针 1/3 到 2/3 的部分复制到缓冲区中。 (缓冲区将具有原始图像大小的 1/3)

关于c - (OpenCL+OpenCV) 如何使用clEnqueueWriteBuffer的偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26503670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com