[英]Image stitching in android using OpenCV
我试图在android中拼接像Panorama View这样的图像。我正在使用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(双,INT,INT,布尔,布尔)”。虽然我有包括头文件中的所有必需库以及NDK的构建路径。我无法理解问题是什么?
任何人都对上述两种图像拼接方法或任何其他新的图像拼接方法或方法有任何想法,请建议我。谢谢。
关于编译错误:似乎你没有正确链接opencv,或者你错过了添加lib文件。 如果您使用的是调试模式OpenCV 2.xx,请检查是否添加了这些库:
opencv_nonfree2xxd.lib
opencv_features2d2xxd.lib
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.