升级到最新版本的Boofcv

时间:2019-01-04 08:49:10

标签: java image-processing boofcv

我当前正在运行Boofcv的旧版本(0.17),并且想要升级。文档(https://boofcv.org/index.php?title=Download)令人困惑:

  

使用boofcv的最简单方法是在Maven上引用其jar   中央。请参阅下面的Maven和Gradle代码。 BoofCV被分解成   许多模块。为了更轻松地使用BoofCV的所有核心   可以使用“全部”模块引用功能。个人   “集成”中的模块仍然必须单独引用。

     

工件列表

boofcv-core : All the core functionality of BoofCV
boofcv-all : All the core and integration packages in BoofCV. YOU PROBABLY WANT CORE AND NOT THIS

这是自相矛盾的-我们使用“全部”还是“核心”?

当我介绍boofcv-core的0.32版本时,会得到许多未解决的引用,例如 Description Resource Path Location Type ImageFloat32 cannot be resolved to a type BoofCVTest.java

我的问题的三个部分: 图像的基本类型是否已重命名? 旧版代码将如何进行编辑? Maven中默认的库集是什么?

2 个答案:

答案 0 :(得分:3)

自0.17以来,已经进行了很多重构,因为事情变得越来越冗长,并且简化了API。例如,ImageFloat32现在为GrayF32。找出所有更改的最简单方法是查看相关的示例代码。

对于模块,请从boofcv-core开始。然后根据需要添加集成中列出的模块。例如,如果您需要android支持,请添加boofcv-android。如果包括boofcv-all,那么您将拥有很多可能不需要的东西,例如Kinect支持。

答案 1 :(得分:1)

为帮助其他正在升级的人,这是我升级到当前Boofcv所做的更改的示例。他们似乎并不困难;我只是用过 s/ImageUInt/GrayU/g 与其他类型相似。到目前为止,我只发现了一种需要更改的方法(VisualizeBinaryData.renderBinary)。

/** thresholds an image
 * uses BoofCV 0.32 or later
 * NOT YET TESTED
 * 
 * @param image
 * @param threshold 
 * @return thresholded BufferedImage
 */

/* WAS Boofcv 0.17
public static BufferedImage boofCVBinarization(BufferedImage image, int threshold) {
    ImageUInt8 input = ConvertBufferedImage.convertFrom(image,(ImageUInt8)null);
    ImageUInt8 binary = new ImageUInt8(input.getWidth(), input.getHeight());
    ThresholdImageOps.threshold(input, binary, threshold, false);
    BufferedImage outputImage = VisualizeBinaryData.renderBinary(binary,null);
    return outputImage;
}
The changes are ImageUInt8 => GrayU8 (etc.) 
VisualizeBinaryData.renderBinary(binary,null) => ConvertBufferedImage.extractBuffered(binary)

It compiles - but haven't yet run it.

 */
public static BufferedImage boofCVBinarization(BufferedImage image, int threshold) {

    GrayU8 input = ConvertBufferedImage.convertFrom(image,(GrayU8)null);
    GrayU8 binary = new GrayU8(input.getWidth(), input.getHeight());
    ThresholdImageOps.threshold(input, binary, threshold, false);
    BufferedImage outputImage = ConvertBufferedImage.extractBuffered(binary);
    return outputImage;
}