Highgui.imread读取旋转图像

时间:2012-12-19 10:25:34

标签: android opencv

我正在使用相机拍摄手机上使用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;
}

如何在正确的位置读取图像?

2 个答案:

答案 0 :(得分:1)

imread解码JPG元数据的方式与您正在使用的图像查看器不同。

移动照片设置了“方向”EXIF。这可以在Chrome浏览器中找到,photo1photo2在tinypic上。

不确定如何在C ++中正确读取和处理EXIF标志,但在python中类似question

没有试过这个,但你可以考虑用另一个库读取图像,保存为png然后读入opencv。

PS:看到这是一篇旧帖子,但是当我遇到同样的问题时,我的搜索结果出现了这个问题,所以也许对其他人有帮助。

答案 1 :(得分:0)

您可以使用imagemagick首先自动定位图像。这会将方向元数据更改为1(或左上角)并更改图像的方向(旋转和镜像,无论哪个是必需的)。

检查方向元数据:识别-format'%[exif:orientation]'

自动定位图像:转换-auto-orient