java iplimage 头文件_JavaCV – 为什么IplImage.createFrom(image)不再存在?

JavaCV 0.11引入FrameConverter以减少与其它API的耦合,导致IplImage.createFrom(image)方法不再直接可用。为解决此问题,可以使用FrameConverters或复制该方法的代码到自己的应用中。文章提供了createFrom()方法的源代码实现,以帮助开发者进行转换操作。
摘要由CSDN通过智能技术生成

原因…

JavaCV 0.11引入了FrameConverter的概念.

目标是不要在使用JavaCV的应用程序和另一个API(FFmpeg,Java 2D ……)之间创建不必要的耦合.

相反,JavaCV使用Frame类实例来存储音频样本或视频图像数据.由于FrameConverters,这些帧可以在以后在各种API之间共享.

解决方法……

始终可以将createFrom方法的代码复制并粘贴到您自己的代码中,或使用FrameConverters重构它.

下面是从源存储库获取的方法的(未编译的)代码:

public static IplImage createFrom(BufferedImage image) {

return createFrom(image, 1.0);

}

public static IplImage createFrom(BufferedImage image, double gamma) {

return createFrom(image, gamma, false);

}

public static IplImage createFrom(BufferedImage image, double gamma, boolean flipChannels) {

if (image == null) {

return null;

}

SampleModel sm = image.getSampleModel();

int depth = 0, numChannels = sm.getNumBands();

switch (image.getType()) {

case BufferedImage.TYPE_INT_RGB:

case BufferedImage.TYPE_INT_ARGB:

case BufferedImage.TYPE_INT_ARGB_PRE:

case BufferedImage.TYPE_INT_BGR:

depth = IPL_DEPTH_8U;

numChannels = 4;

break;

}

if (depth == 0 || numChannels == 0) {

switch (sm.getDataType()) {

case DataBuffer.TYPE_BYTE: depth = IPL_DEPTH_8U; break;

case DataBuffer.TYPE_USHORT: depth = IPL_DEPTH_16U; break;

case DataBuffer.TYPE_SHORT: depth = IPL_DEPTH_16S; break;

case DataBuffer.TYPE_INT: depth = IPL_DEPTH_32S; break;

case DataBuffer.TYPE_FLOAT: depth = IPL_DEPTH_32F; break;

case DataBuffer.TYPE_DOUBLE: depth = IPL_DEPTH_64F; break;

default: assert false;

}

}

IplImage i = create(image.getWidth(), image.getHeight(), depth, numChannels);

i.copyFrom(image, gamma, flipChannels);

return i;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值