3

Android 4.03とopencv for android 2.4.3を使用する携帯電話でカメラを使用して画像をキャプチャしています

私のアプリケーションでは、Highgui.imread を使用してディスクから画像を読み取っています。

しかし問題は、関数が実際に保存された画像とは対照的に常に画像を回転させていることです!

if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            Mat img = Highgui.imread(file.getAbsolutePath());
            if(img!=null)
                n.detectDocument(img.getNativeObjAddr());

そしてネイティブ側で

jbyteArray JNICALL Java_com_example_superemr_NSuperEMR_detectDocument(JNIEnv *env, jobject object, jlong addr)
{
    Mat* image = (Mat*) addr;
    imwrite("/mnt/sdcard/work/hala.jpg",*image);
    return NULL;
}

画像を正しい位置で読み取るにはどうすればよいですか?

4

2 に答える 2

1

imread は、使用しているイメージ ビューアーとは異なる方法で JPG メタデータをデコードします。

モバイル写真には「方向」EXIFセットがあります。これは Chrome で、tinypicの写真 1 と写真2 で見られます。

C++ で EXIF フラグを正しく読み取って処理する方法がわかりませんが、Python では同様の質問です。

これを試したことはありませんが、別のライブラリで画像を読み取り、png として保存してから opencv に読み取ることを検討してください。

PS: これは古い投稿でしたが、同じ問題に遭遇したときにこれが検索結果に表示されたので、他の人に役立つかもしれません.

于 2014-08-30T22:13:13.407 に答える