opencv和magick两个图像处理库的使用心得
常见语言都有简单的图像处理库,我知道java、python等都有。这些库一般比较简单,方便在对应的语言下进行简单的图像处理。另外,一些需要图像处理的芯片也会实现自己独立的图像处理库。
在学习工作过程中,我一般使用matlab、magick、opencv进行图像处理(opengl一般进行图形处理)。
matlab是一个非常强大的软件,包含很多数学处理基础,图像处理,模式识别,信号处理等,和数学沾边的方方面面几乎在matlab中都有比较完美的实现。堪称数学界的神曲。但是它不太合适用于工程应用,着重于过程实现。它函数使用非常简单,如果有想法可以先在matlab下试试。
magick和opencv是在实际项目中比较常用的两个图像处理软件,在实际的应用中,他们各有优缺点。下面介绍一下这两个图像处理库。
magick的官方网站:http://www.imagemagick.org/script/index.php(imagemagick)
http://www.graphicsmagick.org/(graphicmagick)
opencv的官方网站:http://opencv.willowgarage.com/wiki/
- 语言版本
- magick: G2F(Ada), MagickCore(C), MagickWand(C), ChMagick(Ch), ImageMagickObject(COM+), Magick++(C++), JMagick(Java), L-Magick(Lisp), NMagick(Neko/haXe), MagickNet(.NET), PascalMagick(Pascal), PerlMagick(Perl), MagickWand for PHP(PHP), IMagick(PHP), PythonMagick(Python), RMagick(Ruby), or TclMagick(Tcl/TK):使用者可以根据自己习惯的语言来进行相应的编程,我在图像处理的过程中使用的是C++版本的。
- opencv: python版本和C版本(有10%代码是C++实现的):我使用的是C版本
- 对比示例:
// magick中的图像读写 Image image("xxx.jpg"); // 或者 Image image; image.read("xxx.jpg"); image.write("xxxx.jpg"); // opencv中的图像读写 IplImage* image = cvLoadImage("xxx.jpg"); cvSaveImage("xxxx.jpg", image);
2. 实现
- magick:magick主要是以应用的角度展示它的实现,比如图像切割,图像融合,图像模糊,图像锐化等。
- opencv:opencv主要是以算法的角度来展示它的实现,也就是说,它实际提供的是各种图像处理算法,如果需要具体的应用,你需要组合它所提供的算法实现来实现某个功能。
- 对比示例:
// magick中的图像切割image.crop( Geometry(100,100, 100, 100) );(magick中的图像切割)//opencv中的图像切割CvRect crop_rect = cvRect(100,100, 100, 100)IplImage* image_crop = cvCreateImage(cvSize(crop_rect.width, crop_rect.height), image->depth, image->nChannels);cvSetImageROI(image, crop_rect); cvCopy(image, image_crop); cvResetImageROI(image);
// magick中的图像缩放 image.zoom("200x200");//得到是最长边为200的图像 // opencv中的图像缩放 int max_size = 200; int ori_width = image->width; int ori_height = image->height; CvSize dst_size; if(width > height)dst_size = cvSize(max_size, int(max_size * height/(double)width)); elsedst_size = cvSize(int(max_size * width / (double)height), max_size); IplImage* image_zoom = cvCreateImage(dst_size, image->depth, image->nChannels); cvResize(image, image_zoom, CV_INTER_LINEAR);
3. opencv和magick的优缺点对比
- opencv和magick都是开源代码,方便开发
- magick最近更新不多,opencv近几年有Intel的支持更新比较及时,功能越加强大,bug修复也比较及时。
- magick使用简便;opencv的使用稍微复杂,对使用者有一定的图像技术要求。同时,magick封装较好,使用灵活度稍低;opencv使用比较灵活。
- magick功能实现较少,主要是一些常用的图像处理实现,很多比较复杂的图像处理没有实现。opencv的算法实现非常强大,而且从它最近版本更新的速度来看,它将更加强大,很多经典的图像处理算法都被它实现。作为一个图像开发者,这是一个很大的诱惑。
- magick函数的运行时间较慢, opencv运行速度较快。常见的函数 ,比如图像读,图像压缩,图像写等等 ,opencv都要比magick快很多。感兴趣的同学可以自己测试一下,速度的提升会让你满意的。
4. 选择
- 通过opencv和magick的优缺点对比,你也许已经有决断了。总之,opencv功能强大,代码运行速度快,更新速度快,对开发者有一定的要求。magick使用比较简单,对图像处理不太熟悉,又只是想实现简单的图像处理的同学可以选择magick。
- opencv不能解析gif文件格式,听说是因为版权的原因。如果你要用opencv的功能,又需要解析gif文件格式,可以先用其他函数库将其读入再转化为IplImage。
- magick有一个不错的sharpen函数,用于锐化图像,效果挺不错。opencv中没有锐化函数,没有相应的锐化算法实现。我自己尝试了几种锐化方法,但是都没有magick中的实现效果好。所以你确实想在opencv下用这个函数的话,可以将magick中对应的源代码实现。
- 如果选择使用magick的同学,建议使用graphicsmagick。 graphicsmagick和imagemagick的函数调用方法相同,但是graphicsmagick在效率上优于imagemagick,特别是在windows下运行。
opencv和magick两个图像处理库的使用心得相关推荐
- pilt图像处理_详解python opencv、scikit-image和PIL图像处理库比较
进行深度学习时,对图像进行预处理的过程是非常重要的,使用pytorch或者TensorFlow时需要对图像进行预处理以及展示来观看处理效果,因此对python中的图像处理框架进行图像的读取和基本变换的 ...
- 两大图像处理库Halcon和Opencv 的对比
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 OpenCV Halcon 开发语言 C++.C#(emgu).P ...
- Python的图像处理库(OpenCV,PIL,matplotlib和scikit-image)
目前接触过的python图像处理代码涉及到多种的图像库,其中最常用的当属opencv和PIL.惭愧的是,以前只是拿来用,却一直迷惑为什么不同的代码会选择不同的图像库.这些图像库的联系和区别又是什么 ...
- 除opencv以外的一些图像处理库(包含链接)
最近被要求找一些除了opencv以外的一些图像处理库,但网上很多类似的记录,链接都失效了,于是整理了一些目前链接还是有效的库 库名 功能简述 ICL 新型的C + +计算机视觉库,由比勒费尔德大学神经 ...
- 《OpenCv视觉之眼》Python图像处理六 :Opencv图像傅里叶变换和傅里叶逆变换原理及实现
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 机器视觉基础知识/经典系统/常用领域以及机器视觉常用的图像处理库
[0-定义] **计算机视觉:**一门研究如何使机器"看"的科学,更进一步的说,就是指用摄影机和计算机代替人眼对目标进行识别.跟踪和测量等机器视觉,并进一步做图像处理,用计算机处理 ...
- Python图像处理【2】探索Python图像处理库
探索Python图像处理库 0. 前言 1. 利用 scikit-image 绘制图像 2. 使用 SciPy 模块裁剪/调整图像大小 3. 使用 OpenCV 绘制轮廓 3.1 轮廓简介 3.2 绘 ...
- python下医学图像处理库的安装问题(更新中)
1. pip install dipy:DIPY is a python toolbox for analysis of MR diffusion imaging. 2. pip install ni ...
最新文章
- C++实现求字符串的所有的组合
- Flex命令行学习总结
- How is SAP Gateway metadata request converted to XML format transformation
- 线程管理(九)使用本地线程变量
- 只要一点点力气就可以撬起重物?
- vivo C/C++工程师视频面试总结 20180802
- 小程序 获取当前用户地址及地图显示
- IEnumerable和IQueryable的区别
- Envoy service mesh、Prometheus和Grafana下的微服务监控(翻译)
- 安卓最好的浏览器_今日软件 | AI一键抠图、隐私保护工具、全能下载器、安卓启动器、茄子快传、迅雷、批量字符替换、傲游浏览器、全局负一屏...
- 自己应该如何不断学习呢?
- 有关使用seajs和template模板的总结
- dexposed框架Android在线热修复
- 分页,在第一页不显示上一页或禁止使用上一页
- 实验三 直流扫描分析
- Socket(网络编程)面试题
- 最不起眼的基础知识,却成了你面试跨不过去的门槛
- 企业邮箱是什么?企业邮箱和个人邮箱的区别在哪里
- ps有一款比较好用的插件也就是调色插件用过吗
- prometheus-community-PushProx介绍