我正在使用相机拍摄手机上使用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;
}
如何在正确的位置读取图像?
答案 0 :(得分:1)
imread解码JPG元数据的方式与您正在使用的图像查看器不同。
移动照片设置了“方向”EXIF。这可以在Chrome浏览器中找到,photo1和photo2在tinypic上。
不确定如何在C ++中正确读取和处理EXIF标志,但在python中类似question。
没有试过这个,但你可以考虑用另一个库读取图像,保存为png然后读入opencv。
PS:看到这是一篇旧帖子,但是当我遇到同样的问题时,我的搜索结果出现了这个问题,所以也许对其他人有帮助。
答案 1 :(得分:0)
您可以使用imagemagick首先自动定位图像。这会将方向元数据更改为1(或左上角)并更改图像的方向(旋转和镜像,无论哪个是必需的)。
检查方向元数据:识别-format'%[exif:orientation]'
自动定位图像:转换-auto-orient