Panel.image显示一些方向错误的图像

时间:2019-05-18 12:04:10

标签: java python image

我们正在研究Tensorflow以训练图像数据集。 为了获取图像,我们使用手机录制视频,然后使用Python中的OpenCV提取每一帧并将其另存为JPG图像。我使用Windows 10上的“照片”应用将其中一些旋转为人像模式。

然后,我们有了用Java编写的自己的注释工具,以标记在图像上看到的每个项目。它会为每个对象及其坐标(百分比)返回一个CSV文件。

但是,当我昨天进行训练时,我通过张量板界面注意到有些注释不正确(我随照片旋转的注释)

这是在Tensorboard上打开的图像,您可以看到该罐的注释非常错误。

Image on tensorboard

事实证明,如果我使用Java软件打开此图像,则其注释正确,但是正如您在下面看到的那样,该图像是水平的(没有考虑到Photos所应用的旋转):

Image via the Java tool

如果使用Paint或资源管理器将其打开,则它会像张量板一样以纵向模式显示。

另一个事实是,如果我通过Facebook发送图片并再次下载,则它会像从一开始那样就以纵向显示在Java工具上。

这次我尝试使用Paint旋转图像,它在Java工具中正确显示。

以Java显示图像的代码:

panel.image = New File(srcFile);

将视频帧保存在Python中的代码:

cap = cv.VideoCapture(video_path)
while cap.isOpened():
    ret, frame = cap.read()
    if ret:
        try:
            cv.imwrite(output_img_path, frame)
        except Exception:
            pass
    else:
        break
cap.release()

您知道为什么Java会忽略通过Win10 Photos软件施加的旋转吗,为什么它会通过Paint起作用吗?

是否有一种方法可以考虑Java,因为从头开始重新启动会非常不愉快。

先谢谢您

1 个答案:

答案 0 :(得分:0)

注意到使用Paint(而不是Photos)旋转图像可以满足我们的要求后,我发现了问题所在。

”“如果您使用的是Windows 10,则文件资源管理器和默认的图像查看器将正确遵守Exif方向标签,因此来自智能手机或数码相机的照片将正确显示。GoogleAndroid和Apple iOS均会原生创建带有Exif Orientation标记的照片并提供支持。” (source

我使用JPG自动旋转来解决此问题。