java.awt.image.BufferedImage를 인터페이스로 사용할 수 있습니다.
그냥
java.awt.image.BufferedImage에
org.opencv.core.Mat 개체를 변환 한 후
org.bytedeco.javacpp.opencv_core.Mat로 변환 결과 개체를 가져 가라.
1) java.awt.image.BufferedImage에 org.opencv.core.Mat 변환 :
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) 자바를 변환
지금이 당신이 필요로하는 기능입니다. org.bytedeco.javacpp.opencv_core.Mat에 awt.image.BufferedImage는 :
public Mat bufferedImageToMat(BufferedImage bi) {
OpenCVFrameConverter.ToMat cv = new OpenCVFrameConverter.ToMat();
return cv.convertToMat(new Java2DFrameConverter().convert(bi));
}
필요한 모든 항아리와 수입을해야합니다.
JNI에 대해 더 깊이 들어갈 수 있지만 테스트 용으로 충분할 것입니다.
슬픈 주제 - 2 자바 독립 opencv 래퍼, 둘 다 기본적으로 호환되지 않습니다. – berak
어떤 방법이 있어야합니다. 그것을하기 위해 수동으로 함수를 작성하는 것. –
"JavaCV를 사용하는 Android 애플리케이션을 작성하는 중입니다."새 코드에 공식 OpenCV Java API를 사용하는 것이 좋습니다. 그러나 정말로 이것을해야한다면, OpenCV의'Mat.dataAddr()'의 오랜 결과를 bytdeco 포인터로 감추는 것이 아니라면 변환을 수행하고 JNI를 통해 호출하기위한 네이티브 코드를 작성해야 할 것입니다 bytedeco Mat 생성자에 전달할 수 있습니다. – Bull