簡體   English   中英

如何通過android NDK(c ++)將圖像放入openCV的MAT中

[英]How to put an image into a MAT in openCV, through the android NDK (c++)

我通過Android NDK (using c++)使用OpenCv Android NDK (using c++)我想將圖像保存為MAT格式,然后將其顯示在我的Android應用程序上。

我已將圖像保存在資產中。 imread()在NKD中不起作用,因為它無法找到圖像的文件路徑,但是,我可以使用AssetManager加載資源並完美地找到路徑。 此方法將數據保存到char *緩沖區中。

我怎樣才能使用類似於imread()東西將圖像保存到MAT中,或者將char *緩沖區數據轉換為MAT以便在屏幕上顯示它,然后再使用其他openCV函數進行操作?

使用代碼段

extern "C"
JNIEXPORT int JNICALL
Java_com_example_opencv_test_NativeLib_checkNativeImage(JNIEnv *env,
                                                    jclass type,
                                                    jobject jBitmap,
                                                    jint width,
                                                    jint height) {

void *pPixelData = nullptr;
if (AndroidBitmap_lockPixels(env, jBitmap, &pPixelData) ==
    ANDROID_BITMAP_RESULT_SUCCESS) {

    // Android bitmap (Bitmap.Config.ARGB_8888) to Mat
    // Android and OpenCV have different color channels order, just swap it
    // You need cppFlags "-std=c++14" for this code
    // See [opencv_src]\modules\java\generator\src\cpp\utils.cpp for details about PremultiplyAlpha
    // Use https://docs.opencv.org/java/2.4.2/org/opencv/android/Utils.html for Mat in Java

    cv::Mat temp = cv::Mat(cvSize(width, height), CV_8UC4, pPixelData); // 4 channels
    cv::Mat img;
    cv::cvtColor(temp, img, CV_BGRA2RGBA);

    // ... use Mat Image


    // back to Android Bitmap
    cvtColor(img, temp, CV_RGBA2BGRA); // Swap colors back
    memcpy(pPixelData, temp.data, static_cast<size_t>(width * height * 4));


    AndroidBitmap_unlockPixels(env, jBitmap);

    return EXIT_SUCCESS;
}

return EXIT_FAILURE;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM