在安卓系统中使用OpenCV进行图像拼接

 2023-01-20    378  

问题描述

我正在尝试缝制诸如Android的Panorama视图.我正在使用以下JNI代码缝制图像

第一个方法:

在安卓系统中使用OpenCV进行图像拼接

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");
   }

上面的代码适合某些图像,但是如果我使用摄像头拍摄图像并尝试使用上述代码缝制图像,则它不起作用.我正在使用以下代码来调用Android

调用本机代码

FindFeatures(Highgui.imread(path + "Pano1.jpg").getNativeObjAddr(), Highgui.imread(path+"Pano2.jpg").getNativeObjAddr(),panorama.getNativeObjAddr(), 2);
Highgui.imwrite(StitchImageDir.getPath()+ File.separator + "panoStich"+dateFormat.format(dateNow) +mImageExt, panorama);

方法声明

public native void FindFeatures(long image1, long image2, long image3,int count);

第二种方法:

我还尝试使用SurffeAtureDetector缝制图像,其代码可用在这里 .标题和NDK的构建路径.我不明白问题是什么?

你们中的任何人都对以上两种图像缝合方法或任何其他新想法或图像缝合方法有任何想法,请提前建议我.

推荐答案

关于编译错误:似乎您没有正确链接OpenCV,或者您错过了添加LIB文件.
如果使用调试模式OPENCV 2.X.X:

,请检查是否添加这些LIB

opencv_nonfree2xxd.lib

opencv_features2d2xxd.lib

以上所述是小编给大家介绍的在安卓系统中使用OpenCV进行图像拼接,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26101.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。