我有以下情况,我的内存图像和存储到磁盘然后读回的内容不相等,我想了解为什么以及如何“修复”差异。
如果有人想知道为什么我同时拥有(内存和本地磁盘),那是因为我使用存储的图像来微调我的图像匹配/识别,使用 OpenCV 的滑动窗口,而无需不断等待视频流来显示我的内容正在寻找。
BGR 帧来自ffmpeg
以bgr24
像素格式创建的视频流,然后按如下方式处理:
self.raw_image = self.pipe.stdout.read(self.byte_length * self.byte_width * self.byte_offset)
bgr_frame = np.frombuffer(self.raw_image, dtype=np.uint8).reshape((self.byte_width, self.byte_length, self.byte_offset))
cv2.imwrite("capture/rgb/Frame_%d.png", self.frame_num), bgr_frame, [cv2.IMWRITE_PNG_COMPRESSION, 0])
现在事情变得有趣了,它bgr_frame
被发送到另一个函数,该函数切出感兴趣的区域,然后尝试将每个区域与lib_image
图像库中的 a 进行匹配,就像这样
res = cv2.matchTemplate(region, lib_image, 'cv2.TM_CCOEFF_NORMED')
为悬停在区域周围res
返回的值低于从磁盘读回相同图像的值,如下所示:bgr_frame
.86
.1
image = cv2.imread("%s/%s" % (input_directory, file))
image = image[:,:,::-1] # Flip BGR to RGB
通过相同的函数推送image
从磁盘读取以将区域与库进行匹配,从而产生.96
范围内的匹配!
我错过了什么?OpenCV 文档没有提到对图像做任何事情,除了在我的情况下PNG
以特定格式对图像进行0
压缩,但显然内存中的内容和写入/读取到磁盘的内容有所不同。