Java 降低图像质量以实现更快的surf算法opencv Android
我正在尝试将图像与android上的surf算法进行匹配。我有一个JavaCameraView对象,它在我的java类中从照相机捕获图像。我像这样将此图像传递给我的本地类:Java 降低图像质量以实现更快的surf算法opencv Android,java,android,c++,image,Java,Android,C++,Image,我正在尝试将图像与android上的surf算法进行匹配。我有一个JavaCameraView对象,它在我的java类中从照相机捕获图像。我像这样将此图像传递给我的本地类: @Override public void onCameraViewStarted(int width, int height) { _mRgba = new Mat(height, width, CvType.CV_8UC4); } @Override pub
@Override
public void onCameraViewStarted(int width, int height) {
_mRgba = new Mat(height, width, CvType.CV_8UC4);
}
@Override
public void onCameraViewStopped() {
_mRgba.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame)
{
_mRgba = inputFrame.rgba();
nativeClass.detectAndMatch(_mRgba.getNativeObjAddr());
return _mRgba;
}
Size szSource = new Size(160,120);
_mRgba = new Mat(szSource, CvType.CV_8UC3);
<>但是在C++代码中,SURF算法是非常慢的。这是我的代码:
Mat& frame = *(Mat*)addrRgba;
Mat grayFrame, desGrayFrame;
Mat object, desObject;
vector<KeyPoint> kpObject;
vector<KeyPoint> kpGrayFrame;
vector<vector<DMatch > > matches;
vector<DMatch > good_matches;
float thresholdMatchingNN=0.7;
unsigned int tresholdGoodMatches = 4;
int minHess = 3000;
FlannBasedMatcher matcher;
object = imread ("/sdcard/NoTouch/elli.png", CV_LOAD_IMAGE_GRAYSCALE);
if(! object.data )
{
__android_log_print(ANDROID_LOG_ERROR, "TRACKERS", "%s", "Can not
load image from phone");
}
SurfFeatureDetector detector(minHess);
detector.detect(object, kpObject);
SurfDescriptorExtractor extractor;
extractor.compute(object, kpObject, desObject);
cvtColor(frame, grayFrame, CV_RGB2GRAY);
detector.detect(grayFrame, kpGrayFrame);
extractor.compute(grayFrame, kpGrayFrame, desGrayFrame);
matcher.knnMatch(desObject, desGrayFrame, matches, 2);
它稍微快一点,但仍然很慢。我对java中的代码感到困惑:
Size szSource = new Size(160,120);
因为有些设备支持不同的分辨率。你能解释清楚如何降低图片的质量吗?对于加快这一进程,你还有什么其他建议吗