macOS上如何在MATLAB中编译使用jpegtbx_1.4?
预备:jpegtbx_1.4全称是JPEG Toolbox v1.4,是一个对JPEG图像进行处理的函数集合。这个工具箱可以借助MATLAB提取出JPEG图像的头信息、编码信息、DCT系数矩阵、量化表、哈夫曼表等JPEG元素,以供我们图像处理、信息隐藏来使用。
这个工具箱基于IJG(i.e. Independent JPEG Group)进行开发,代码内容是C语言,属于MATLAB\C混合编程。使用这个工具箱,我们需要在MATLAB中用mex命令进行编译。
这个操作在win、Linux中很容易实现,但在macOS中,会遇到问题。
本文涉及组件及版本:
MATLAB R2017b for mac
IJG v9
jpegtbx_1.4
macOS 10.15.1 Catalina
一、配置IJG框架
不能跳过这个步骤,除非你清楚你的mac中已经有IJG框架。
1、下载IJG
官网:www.ijg.org。macOS请选择tar.gz格式的压缩包。下载下来后解压开(我的版本是v9)。
2、安装IJG
里面有一个install.txt,里面详细说明了安装方法。我在这里简要讲一讲。
步骤1:使用终端(Terminal)进入解压出的文件夹。用ls | grep configure
查找一下看是否有一个叫configure的执行文件。(如果没有,你可能进错地方了)
步骤2:终端内执行:./configure
,系统会自动配置IJG。
步骤3:终端内执行:make
,对文件进行编译。
步骤4:终端内执行:make test
测试是否可用。如果可用,文件夹内会多出很多图片:
恭喜完成第一步。
二、准备编译jpegtbx
这里需要做的准备工作就是,寻找一个lib库。因为编译jpegtbx一定要用到这个库。这个库里放置了编译时要用的头文件。我当初没有人告诉我这个库文件在哪里,自己明知道缺少一个库文件,却不知道这个文件已经悄悄藏在了我的电脑里面。结果苦苦在百度、必应、谷歌上搜了半天,最后在StackOverFlow上有个老外的回答里得到了启发。(半天还算好,我的一个研究生学长弄了两天未果,最终放弃了)。咳咳!!!
使用终端执行:
cd /usr/local/lib #进入该目录
ls | grep jpeg #筛选出名称包含jpeg的项目
执行完成后,你应该找到了一个libjpeg.a
的文件。这就对了,恭喜你!
如果没有,那证明你的IJG框架没有搭成功,回到“一、配置IJG框架”再试。
三、编译jpegtbx_1.4
做好了一切铺垫,我们开始做最重要的MATLAB编译工作。
打开MATLAB(我的版本是R2017b for mac),一般来说,不低于2012的版本都可以用这个教程。
使用命令:mex -I<IJGPATH> jpeg_read.c <LIBJPEG>
来编译jpeg_read()函数。
使用命令:mex -I<IJGPATH> jpeg_write.c <LIBJPEG>
来编译jpeg_write()函数。
注意:把IJGPATH
替换为你的IJG路径,应该是一个名叫jpeg-9d的文件夹(9是我现在的版本)。假如这个文件夹不在MATLAB的工作路径(PATH)下,你需要使用绝对路径。
把LIBJPEG
替换为/usr/local/lib/libjpeg.a
正常情况下,不会报错。
执行完成后,MATLAB会恭喜你成功,同时你可以到在jpegtbx_1,4的路径中已经有了后缀名为.mexmaci64的两个文件。
这样一来,再将jpegtbx_1.4这个文件夹加入MATLAB工作路径,你就可以在MATLAB中使用jpeg_read()和jpeg_write()两个函数来读取和生成JPEG图像了!
四、问题讨论
这是我跳过的坑,可能具有偶然性。如果你发现其他的坑,很欢迎在评论区告诉我!