java – 软件梯形失真校正算法
作为我的软件的一部分,我正在寻找一个梯形失真校正滤镜,以避免在投影仪以不垂直于屏幕的角度显示时可以获得的墓碑/梯形失真效果.
目前我已经有了一些工作,但速度非常慢(整个图像约为100毫秒),理想情况下我想要更快的速度(最好是在10毫秒范围内).我基本上只是循环整个图像像素按像素将我想要的像素复制到一个新数组中,然后将新图像的rgb内容设置为这个新数组: public BufferedImage getCorrectedImage() { double width = originalImage.getWidth(null) * 0.5; double increment = (originalImage.getWidth(null) - width)/originalImage.getHeight(); BufferedImage ret = new BufferedImage(originalImage.getWidth(null),originalImage.getHeight(null),BufferedImage.TYPE_INT_ARGB); for (int h = 0; h < originalImage.getHeight(); h++) { int[] arr = new int[originalImage.getWidth()]; for (int w = 0; w < originalImage.getWidth(); w++) { arr[w] = originalImage.getRGB(w,h); } int[] newPixels = getShortLine(arr,(int) (width + 0.5)); for (int w = 0; w < originalImage.getWidth(); w++) { ret.setRGB(w,h,newPixels[w]); } width += increment; } return ret; } private int[] getShortLine(int[] original,int newSize) { int[] newArr = new int[original.length]; double scale = original.length / newSize; int start = (original.length - newSize) / 2; int end = original.length - ((original.length - newSize) / 2); for (int i = start; i < end-1; i++) { newArr[i] = original[(int) ((i - start) * scale)]; } return newArr; } 这样做最好的方法是什么?一个自定义仿射变换最初是我要看的,但我找不到任何代码/示例,指出我正确的方向.有没有比上面更好的方法来实现我想要的结果? 解决方法
您可以采取一些措施来加快现有代码的速度.请注意,这些将使您的代码更加混乱,更难以阅读……并进行调试.但是,如果算法正在运行,那么重构以获得更好的性能可能不会太困难:
>尝试使用profiler来查看算法中是否存在任何不明显的瓶颈. 查看完全用Java编写的ImageJ. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 为什么我的应用程序在IntelliJ中比命令行运行得更快
- java – 基于Spring MVC注释的多模块项目配置
- java – 返回节点集或XML片段(非简单数据类型)的XSLT自定义
- 导入excle数据将excle数据插入到数据库
- 基于HttpClient在HTTP协议接口测试中的使用(详解)
- Java Quartz预定作业 – 禁止并发执行Job
- Java servlet 使用 PrintWriter 时的编码与乱码的示例代码
- java 微信随机红包算法代码实例
- 我可以在Java应用程序中通过POP3和OAuth2访问Gmail邮件吗?
- java – ‘cmd’未被识别为内部或外部命令,可运行程序或批处