您可以使用java.awt.image.BufferedImage作爲接口。
您org.opencv.core.Mat對象只是轉換爲java.awt.image.BufferedImage中再取結果對象將其轉換爲org.bytedeco.javacpp.opencv_core.Mat。
現在,這些都是你需要的功能:
1)轉換org.opencv.core.Mat到java.awt.image.BufferedImage中:
public BufferedImage matToBufferedImage(Mat frame) {
int type = 0;
if (frame.channels() == 1) {
type = BufferedImage.TYPE_BYTE_GRAY;
} else if (frame.channels() == 3) {
type = BufferedImage.TYPE_3BYTE_BGR;
}
BufferedImage image = new BufferedImage(frame.width() ,frame.height(), type);
WritableRaster raster = image.getRaster();
DataBufferByte dataBuffer = (DataBufferByte) raster.getDataBuffer();
byte[] data = dataBuffer.getData();
frame.get(0, 0, data);
return image;
}
2)將Java。 awt.image.BufferedImage到org.bytedeco.javacpp.opencv_core.Mat:
public Mat bufferedImageToMat(BufferedImage bi) {
OpenCVFrameConverter.ToMat cv = new OpenCVFrameConverter.ToMat();
return cv.convertToMat(new Java2DFrameConverter().convert(bi));
}
確保擁有所有必要的罐子和進口。
你可以深入到JNI的東西,但對於測試用例,這應該是足夠的。
是的,悲傷的話題-2 java獨立opencv包裝,兩者基本不兼容。 – berak 2014-08-27 19:04:49
必須有某種方式。編寫一個手動函數來做它或某事。 – 2014-08-27 19:10:17
「我正在編寫使用JavaCV的Android應用程序」:我強烈建議您使用官方OpenCV Java API來獲取新代碼。但是,如果你真的必須這樣做,你可能需要編寫一些本地代碼來進行轉換並通過JNI調用它,除非有人將OpenCV的'Mat.dataAddr()'的長結果轉換爲bytdeco指針,你可以將它傳遞給bytedeco的Mat構造函數。 – Bull 2014-08-28 01:58:40