我正在使用相机在我的手机上捕捉图像,这部手机使用的是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;
}如何在正确的位置读取图像?
发布于 2014-08-31 06:13:13
imread解码JPG元数据的方式与您使用的图像查看器不同。
手机照片有“方向”EXIF设置。这在使用photo1和photo2的Chrome on tinypic中可以看到。
不确定如何在C++中正确读取和处理EXIF标志,但在python中有类似的question。
我还没有尝试过,但你可以考虑用另一个库来读取图像,保存为png,然后读取到opencv中。
PS:我看到这是一个老帖子,但当我遇到同样的问题时,这是在我的搜索结果中出现的,所以也许它会对其他人有帮助。
发布于 2016-03-08 13:30:54
您可以使用imagemagick首先自动调整图像方向。这会将方向元数据更改为1(或左上角),并更改图像的方向(旋转和镜像,视需要而定)。
正在检查方向元数据:标识-format '%exif: orientation‘
自动定向图像: convert -auto-orient
https://stackoverflow.com/questions/13950210
复制相似问题