The simplest way is to use OpenCV. Suppose, you use C++:
cv::Mat shore_mask = cv::imread("Shore_mask.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Then create OpenCL image (or buffer, whatever you like):
cl_int ret_code = CL_SUCCESS;
cl_mem shore_mask_buff = clCreateBuffer(ocl_context, CL_MEM_COPY_HOST_PTR, shore_mask.cols * shore_mask.rows * sizeof(uint8_t), (void*)shore_mask.data, &ret_code);
After you do some black magick with that shore_mask_buff
, you copy it back to OpenCV image:
ret_code = clEnqueueReadBuffer(ocl_command_queue, shore_mask_buff, CL_TRUE, 0, shore_mask.cols * shore_mask.rows * sizeof(uint8_t), (void*)shore_mask.data, 0, NULL, NULL);
And save it to file
cv::imwrite("Processed_shore_mask.jpg", shore_mask);
Source code above may be full of bugs & need to be carefully checked.