最近在做dcm像素任意旋转的时候(没有dcm经验的人,可以理解是图像像素的任意旋转). 旋转是使用了使用 opencv的 Imgproc.warpAffine()方法,但是发现耗时很长,平均在3~4ms左右.作为一个bs产品,提升速度就相当重要了.
代码层面的优化: 将图像512X512 放大至3000X3000,然后再旋转,这个耗时肯定要比先旋转在放大长.
源码上的改造: 目前的opencv源码 4.5.1 版本 和 4.7.0版本;
(强调 一下 项目是java的,编译的也是生成jar包,下面的测试结果也是调jar得出的结论)
(测试的都是图片,图片转成Mat,然后旋转的,单位都是 ms)
一. 4.5.1版本
正常的编译 ----- 图片旋转(这个时候编出来的是不支持dcm的像素旋转的,缺gdcm模块)
正常 + gdcm 模块 ----模块增加了,相应的速度会受到影响
正常 + gdcm + ipp模块 --- ipp是加速库,感兴趣的可以去看一下
正常 + gdcm + 改造 --- 改造后发现速度与加了ipp相差不多
正常 + gdcm + ipp + 改造 ---- 速度提升很明显,等下在重点说一下改造方法
二.4.7.0版本
这个版本加了很多3d的库和方法,造成整个模块比较重
正常 + gdcm + ipp ----发现速度比opencv4.5.1版本慢了很多了,这里就没有在比较了
三.weasis-opencv-core3.04
因为现在项目是使用的dcm4che,其中用到的weasis-opencv-core3.04,这个jar就是调的 opencv模块
看了这个源码内部,调的opencv模块,换上上面编的,是不能直接用的, 猜想可能是内部对opencv进行加速改造(没有相关文档,而且源码调的时候,也是直接调的编好的opencv的dll,其具体细节不太好研究了.
四. weasis-opencv-core4.55
最新的引入了3d模块,如果技术没有用到新的,升级了可能会变慢(日常基本不咋升级那些第三方,是不是有这个意思呢)
下篇就是说具体改造了,可能涉及到代码,比较繁琐,感兴趣的继续下去