所以我正在用AR无人机编写一个颜色检测应用程序。无人机从它的摄像头以YUV420p格式向我的python/opencv套接字服务器发送图像。在
我使用opencv IPLImage访问映像的方法如下(是的,这是低效的,但我不想/不想自己编写新的转换工具):
我现在的问题是一个非常明显的色差。我在这些照片里挥舞着一张红色的毡布。第一个显示出浓重的黄色。第二种虽然没有那么糟糕,但非常罕见——大多数情况下,当我有红色床单时,它的颜色很深。在
我想知道这两件事:
我的ffmpeg转换线看起来像
ffmpeg -s 640x480 -vcodec rawvideo -f rawvideo -pix_fmt yuv420p -i image.yuv -vcodec bmp -f image2 output.bmp
我也试过:
^{pr2}$不幸的是,色差总是存在的!在
色差是我现在最大的问题,因为我后来将图像转换为HSV,并使用阈值选择一个适合我的颜色范围。在
这种方法似乎对我有效:
输出:
另一种方法是使用强大的Imagemagick
^{2}$有趣的是,ffmpeg和imagemagick不会返回相同的结果:
结果:
更新 太糟糕了。唯一合理的解释是PIL被阻塞了(当涉及到YCbCr处理时,它有一些特殊性;这里有很多关于这个的Q)。正如你从我的帖子中看到的,如果输入是正确的YCbCr,那么输出就是正常的!在
如果我没看错你的Q,你已经收到了YV12格式的数据。 输入为VGA格式,因此以下代码将单独的平面(Y、Cb、Cr)拆分为自己的变量:
现在你有了漂亮的numpy数组中的数据!要转换为矩阵,请执行以下操作:
希望有帮助!如果没有,给我留言。。。在
相关问题 更多 >
编程相关推荐