gpt4 book ai didi

python - OpenCV imwrite()/imread() 这两个函数是否以任何方式修改图像?

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:03 24 4
gpt4 key购买 nike

我有以下情况,我的内存图像和存储到磁盘然后读回的图像不相等,我想了解为什么以及如何“修复”差异。

如果有人想知道为什么我同时拥有(内存和本地磁盘),因为我使用存储的图像使用 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 进行匹配图片,像这样

res = cv2.matchTemplate(region, lib_image, 'cv2.TM_CCOEFF_NORMED')

bgr_frame 返回的 res 的值徘徊在 .86 区域,即 .1 比像这样从磁盘读回相同的图像要低:

image = cv2.imread("%s/%s" % (input_directory, file))
image = image[:,:,::-1] # Flip BGR to RGB

通过相同的函数推送从磁盘读取的 image 以将区域与库相匹配,结果是 .96 范围内的匹配!

我错过了什么? OpenCV 文档没有提到对图像做任何事情,除了在我的例子中用 0 压缩以特定格式编码图像之外,但很清楚内存中的内容和内容写入磁盘/从磁盘读取不同。

最佳答案

CV2 imwrite 在像这样调用时对 BGR2RGB 的输出进行转换:

cv2.imwrite("capture/rgb/Frame_%d.png", self.frame_num), bgr_frame, [cv2.IMWRITE_PNG_COMPRESSION, 0])

这就是为什么在传递图像进行分析之前添加 cv2.cvtColor(bgr_frame, cv2.COLOR_BGR2RGB) 至少修复了我看到的颜色问题,这也解释了为什么在 CV2 上imread 我不得不翻转阵列以使图像增益恢复为 RGB;可能有一个 CV2.xxxxx 参数,我可以将其传递给 imread,它会立即将图像读取为 RGB,无需任何数组操作。

image = cv2.imread("%s/%s" % (input_directory, file))
image = image[:,:,::-1] # Flip BGR to RGB

然而,这仍然没有解决我在保存和加载时从 live 流帧 .86.96 匹配不佳的问题与 PNG 相同的框架。

关于python - OpenCV imwrite()/imread() 这两个函数是否以任何方式修改图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53772063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com