我们正在研究Tensorflow以训练图像数据集。 为了获取图像,我们使用手机录制视频,然后使用Python中的OpenCV提取每一帧并将其另存为JPG图像。我使用Windows 10上的“照片”应用将其中一些旋转为人像模式。
然后,我们有了用Java编写的自己的注释工具,以标记在图像上看到的每个项目。它会为每个对象及其坐标(百分比)返回一个CSV文件。
但是,当我昨天进行训练时,我通过张量板界面注意到有些注释不正确(我随照片旋转的注释)
这是在Tensorboard上打开的图像,您可以看到该罐的注释非常错误。
事实证明,如果我使用Java软件打开此图像,则其注释正确,但是正如您在下面看到的那样,该图像是水平的(没有考虑到Photos所应用的旋转):
如果使用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,因为从头开始重新启动会非常不愉快。
先谢谢您
答案 0 :(得分:0)
注意到使用Paint(而不是Photos)旋转图像可以满足我们的要求后,我发现了问题所在。
”“如果您使用的是Windows 10,则文件资源管理器和默认的图像查看器将正确遵守Exif方向标签,因此来自智能手机或数码相机的照片将正确显示。GoogleAndroid和Apple iOS均会原生创建带有Exif Orientation标记的照片并提供支持。” (source)
我使用JPG自动旋转来解决此问题。