JavaCVで、ByteArrayからMatに変換するときの備忘録。
JavaのOpenCVで画像変換をするためには、OpenCVの導入が必要になる。
ただ、配布可能パッケージとして利用を考えたとき、まだ自分ではうまく取り廻せないためJavaCVで乗り切れないかと考えた。
その際、Matの作成時に2byte文字(日本語等)のパスがJavaCV、OpenCVでは読み込めずエラーになるため、調べたところByteArrayからMatに変換すれば可能といった記事がいくつか出てきた。
しかし、NativeなOpenCVを利用せず、JavaCVを利用したByteArrayからMat変換方法がなかなかヒットせず、途方に暮れていたところ海外のサイトで対処方法を見つけたため、備忘録として残す。
※肝心のサイトがどこかを忘れた、、、
ConvertMat.java
public static Mat convertMat(Path sourcePath){
// 念のため引数のPathをURIに変換
URI srcUri = sourcePath.toUri();
try(ByteArrayOutputStream bos = new ByteArrayOutputStream()){
// URIに変換したPathを格納
Path srcPath = Paths.get(srcUri);
Files.copy(srcPath, bos);
// JavaCVのjavacpp.BytePointerに渡してMatとして格納
return imdecode(new Mat(new BytePointer(bos.toByteArray())),IMREAD_ANYDEPTH | IMREAD_ANYCOLOR);
} catch (IOException e){
e.printStackTrace();
}
return null;
}
でByteArrayからMatへの変換はひとまず可能。