我在玩一个使用MicroManager1.4的显微镜摄像头。使用Python接口,我已经成功地访问了相机,改变了曝光时间等,我可以捕捉到个别的图像。在
然而,每个图像返回为NumPy数组,其中每个像素表示为单个整数,例如“7765869”。据我在网上找到的,这在Java中被称为“BuffereImage”,这意味着RGB值编码为:
BufferedImage = R * 2^16 + G * 2^8 + B
我的问题是:如何使用Numpy或OpenCV,将这种数组转换成更方便的数组,其中每个像素都是uint8值的RGB三元组?不用说,转换应该尽可能高效。在
至少我认为。。。在
上述公式也可以写成
^{pr2}$这对我来说更易读,也更清楚发生了什么
一种方法是
然而,我怀疑它是最优雅的(Python?)或者最快的方法。在
最简单的方法就是让纽比帮你做转换。你的numpy数组可能是
np.uint32
类型。如果您将其视为np.uint8
的数组,那么您将得到一个RGB0格式的图像,即每个像素的R、G和B值,加上后面一个空的np.uint8
。很容易重塑和丢弃零值:最好的是没有计算或复制数据,只是对原始图像内容的重新解释:我认为你没有比这更有效的了!在
我记得,对于某些操作OpenCV需要一个连续数组,所以您可能需要在表达式的末尾添加一个
.copy()
来真正消除零列,而不是简单地忽略它,尽管这当然会触发上面代码避免的数据拷贝。在相关问题 更多 >
编程相关推荐