我正在寻找一个给定大小为 x 的图像的 C 库,它将图像拆分为多个图像,以便我可以将每个子图像发送到专用 CPU 以使用区域增长或其他方式检测其上的片段。
4 回答
你真的要分割图像吗?
如果您使用的是多核 CPU,最好加载一次图像,然后使用 x,y,width,height 参数在其上运行处理线程(我假设处理只读取图像)。
如果您有更多主机,则有一个调度程序,它正在对图像执行几个操作:解压缩、拆分、压缩部分、传输部分。我认为,处理主机在同一个本地网络上。如果您可以将图像作为广播发送到这个本地网络,我的意思是所有主机一次接收图像,这将是一个性能提升:displathcer 不必拆分和重新发送部分,处理任务应该只选择接收到的整个图像的适当部分(x,y,宽度,高度)。我不知道您使用的是什么图像格式,但我很确定您不必解压缩整个图像,至少在垂直方向上您应该跳过不需要的区域。(您应该将图像拆分为全宽区域,以避免解压缩不需要的区域。)
合并来自单独分割输出的结果将是困难的部分。如果你碰巧通过一个段分裂怎么办?你会从每个分割的图像中得到一个片段,你必须将它们合并在一起。会有不确定的情况,因此您必须选择一个指标来决定何时合并两个区域。
如果这是一个问题,您可能想尝试使用Seam Carving算法来生成不太可能与区域边缘相交的分割。Photoshop 的 Content-Aware Resize 工具使用接缝雕刻来查找图像中视觉上不重要的水平和垂直路径。
在同意 Shai 和 japreiss 的同时,由于您的目标是图像分割,因此您将遇到边界问题(因为您需要邻域信息),对于图像处理部分,我建议类似
libpng:http ://www.libpng.org/pub/png/libpng.html
看看这些 StackOverflow 问题:
当您的缓冲区充满图像值时,读取和写入它的部分应该一点也不棘手。