基于OpenCV的android图像拼接
我正在尝试在android中缝合像全景视图这样的图像。我正在使用android NDK和库。我正在使用下面的Jni代码来缝合图像 第一种方法:基于OpenCV的android图像拼接,android,c++,opencv,java-native-interface,opencv-stitching,Android,C++,Opencv,Java Native Interface,Opencv Stitching,我正在尝试在android中缝合像全景视图这样的图像。我正在使用android NDK和库。我正在使用下面的Jni代码来缝合图像 第一种方法: extern "C" { JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial3_Sample3Native_FindFeatures( JNIEnv*, jobject, jlong im1, jlong im2, jlong im3, jint no_images
extern "C" {
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial3_Sample3Native_FindFeatures(
JNIEnv*, jobject, jlong im1, jlong im2, jlong im3, jint no_images) {
vector<Mat> imgs;
bool try_use_gpu = false;
Mat& temp1 = *((Mat*) im1);
Mat& temp2 = *((Mat*) im2);
Mat& pano = *((Mat*) im3);
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Before stitching Images\n...");
if(temp1.empty() || temp2.empty())
{
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Can’t read one of the images\n...");
printf("Can’t read one of the images\n");
}
else{
imgs.push_back(temp1);
imgs.push_back(temp2);
Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
Stitcher::Status status = stitcher.stitch(imgs, pano);
if (status != Stitcher::OK)
{
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Can't stitch images, error code = %i" +status);
}
else
{
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Stitching Image Successfully");
}
方法声明
public native void FindFeatures(long image1, long image2, long image3,int count);
第二种方法:
extern "C" {
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial3_Sample3Native_FindFeatures(
JNIEnv*, jobject, jlong im1, jlong im2, jlong im3, jint no_images) {
vector<Mat> imgs;
bool try_use_gpu = false;
Mat& temp1 = *((Mat*) im1);
Mat& temp2 = *((Mat*) im2);
Mat& pano = *((Mat*) im3);
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Before stitching Images\n...");
if(temp1.empty() || temp2.empty())
{
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Can’t read one of the images\n...");
printf("Can’t read one of the images\n");
}
else{
imgs.push_back(temp1);
imgs.push_back(temp2);
Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
Stitcher::Status status = stitcher.stitch(imgs, pano);
if (status != Stitcher::OK)
{
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Can't stitch images, error code = %i" +status);
}
else
{
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Stitching Image Successfully");
}
我还尝试使用可用代码的SurfFeatureDetector缝合图像。在这段代码中,我得到了对'cv::SURF::SURF(double,int,int,bool,bool)的未定义引用的编译错误“。虽然我在NDK的头文件和构建路径中包含了所有必要的库,但我不明白问题出在哪里
任何人对上述两种图像拼接方法或任何其他新的图像拼接方法有任何想法,请向我推荐。提前感谢。关于编译错误:似乎您没有正确链接opencv,或者您没有添加lib文件。 如果使用调试模式OpenCV 2.x.x,请检查是否添加了以下LIB: opencv_nonfree2xd.lib opencv_特性2D2XXD.lib