Я пытаюсь сшить изображения, такие как панорамный вид в Android. Я использую Android NDK и OpenCV библиотека для этого. Я использую ниже код Jni для сшивания изображений
Первый метод:
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, чей код доступен Вот.В этом коде я получил ошибку компиляции неопределенная ссылка на `cv :: SURF :: SURF (double, int, int, bool, bool) ‘.Хотя я включил все необходимые библиотеки в заголовок, а также в путь сборки NDK. Я не могу понять, в чем проблема?
У любого из вас есть какие-либо идеи относительно любого из двух вышеуказанных методов сшивания изображений или любой другой новой идеи или метода сшивания изображений, пожалуйста, предложите мне. Спасибо заранее.
Что касается ошибки компиляции: кажется, что вы не связываете opencv должным образом или пропускаете добавление файлов lib.
проверьте, что вы добавляете эти библиотеки, если используете режим отладки OpenCV 2.x.x:
opencv_nonfree2xxd.lib
opencv_features2d2xxd.lib
Других решений пока нет …