如何在OCAML中读取位图?

0xF*_*xFF 6 ocaml bitmap image-processing

我想使用OCAML读取位图文件(来自文件系统)并将像素(颜色)存储在具有位图的第二维的数组内,每个像素将占用数组中的一个单元.

我找到了函数Graphics.dump_image image - > color array array 但它不能从文件中读取.

nlu*_*oni 8

CAMLIMAGE应该这样做.还有一个debian包(libcamlimage-ocmal-dev),以及通过godi安装,如果你用它来管理你的ocaml包.

作为在ocaml中读取和操作图像的一个有用示例,我建议在本征类上查看接缝去除算法的代码.

你也可以像jonathan所说的那样 - 但不是很好 - 从ocaml调用C函数,比如ImageMagick.虽然你要对图像数据进行大量操作以将图像带入ocaml,但你总是可以为所有函数编写c来操作图像作为抽象数据类型 - 这似乎完全与你想要的,用C语言编写大部分程序而不是ocaml.

因为我最近想玩camlimages(并且在安装它时遇到了一些麻烦 - 我不得不修改编译错误中的两个ml文件,但非常简单).这是一个快速程序,black_and_white.ml以及如何编译它.这应该让人无痛地开始使用包(特别是动态图像生成):

   let () =
       let width  = int_of_string Sys.argv.(1)
       and length = int_of_string Sys.argv.(2)
       and name   = Sys.argv.(3)
       and black = {Color.Rgb.r = 0; g=0; b=0; }
       and white = {Color.Rgb.r = 255; g=255; b=255; } in
       let image = Rgb24.make width length black in
       for i = 0 to width-1 do
           for j = 0 to (length/2) - 1 do
               Rgb24.set image i j white;
           done;
       done;
       Png.save name [] (Images.Rgb24 image)
Run Code Online (Sandbox Code Playgroud)

并编译,

ocamlopt.opt -I /usr/local/lib/ocaml/camlimages/ ci_core.cmxa graphics.cmxa ci_graphics.cmxa ci_png.cmxa black_and_white.ml -o black_and_white
Run Code Online (Sandbox Code Playgroud)

并运行,

./black_and_white 20 20 test1.png
Run Code Online (Sandbox Code Playgroud)


Mar*_*usQ 1

我不知道有什么现成的方法可以做到这一点。您可以使用打开文件并open_in一次读取它的字节input_char,吸入标头和数据并以color array array这种方式构建简单格式(例如BMP),但对于JPG或PNG之类的任何内容,您自己的解决方案可能会做比你想做的更多的工作。