我写这篇文章是我的最后一颗子弹,用来解决这里发生的事情的迷思。
本质上,我正在开发一个IOS应用程序,它将上传一组照片到Azure,它们将在批处理服务中与AI和图像处理一起处理。
应用程序应该上传图像到一个天青功能,这将触发批处理服务,所有的处理,然后结果存储在一个存储帐户。
到目前为止,我所做的所有测试都是成功地处理了来自本地的图像,甚至让我的PC从云端下载它们,并按照相同的编码/解码步骤处理它们,直到进程开始。
当我完成整个过程,只包括前端部分时,问题就开始了,唯一的区别是图像是从IOS而不是我的PC上传到功能中的,它给出了完全不同的(错误的)结果。
直到现在我已经测试过的东西:
我用来开始这个过程的代码。
generator = block_blob_service.list_blobs(container_name)
front = block_blob_service._get_blob(container_name, blob.name)
b64_bytes_front = np.frombuffer(front.content, dtype=np.uint8)
opencv_front = cv.imdecode(b64_bytes_front, cv.IMREAD_COLOR)
img = opencv_front正如我所说,我使用相同的代码下载到我的个人电脑(在结束时写)
我不知道还能做些什么,这里有没有人有过类似的经历?
非常感谢。
编辑。我知道所有的opencv RGB标准。通道是对的,我认为这更多的是与图像的解码过程有关,它最初被识别为jpeg (来自蔚蓝),而同一图像(不是)被识别为Octet应用程序,正如我从IOS上传它时所显示的那样。我开始猜测这没有解决方案,因为我说的是编码/解码步骤的自然损失,但是处理上的差别太大了
发布于 2019-11-18 13:49:09
我注意到了这一行: opencv_front = cv.imdecode(b64_bytes_front,cv.IMREAD_COLOR),我假设这句话意味着您正在使用openCV并做一些有颜色的事情?不久前,我发现openCV在内部将颜色值存储为BGR,而不是RGB。但是,它确实期望输入是RGB,除非您告诉它,如果您使用openCV的任何文件写入功能,它将自动将格式还原回RGB。现在,我认为它影响到你的IOS应用程序的原因是: openCV使用BGR格式,因为它是数码相机使用的格式!(原因可以在这里读到:https://www.learnopencv.com/why-does-opencv-use-bgr-color-format/)我猜是因为IOS照片/图像是以BGR格式存储的,如果你通过应用程序发送它们,它们就会以BGR的形式发送,而当你将它们导出到你的电脑时,IOS软件会将它们转换成RGB,这样当你试图在PC上查看照片时,你的照片就不会显得奇怪了--这就解释了为什么下载到你的个人电脑,然后重新上传这个问题。
希望这能帮上忙!
https://stackoverflow.com/questions/58915924
复制相似问题