在main函数中,先得到灰度图的直方图次数统计,作为一个参数,传入到opencl 计算的内核当中。在内核中,根据一个range二维的globalThreads,来得到并行计算中,当前的线程要计算的点在原图中的对应坐标,确定灰度值,然后根据输入的代表灰度直方图的数组,来得到目前灰度以前的累计次数和,归一化后,计算出该灰度值,在均衡化后的新值。返回给dest_data buffer,最后从device考回host内存,得到新图片的数组矩阵。
原图
直方图均衡化
我不知道是虚拟机的问题,还是我的问题,一样的代码,我之前弄了78个小时,一直是运行段错误,包括利用gdb进行debug也只是报了说一些不知名的.so文件出错,make clean等都尝试过,反复检查,都不知道哪里,结果我新建一个文件夹,但仍然用之前一样的代码,直接就有结果了,这个就比较恶心了。。还有就是注意存图片的类型uchar,0-255,但是直方图累计分布的过程,像素点很多,可能会很大,需要开成int数组等。