【问题标题】:odd image using cv2 and numpy使用 cv2 和 numpy 的奇数图像
【发布时间】:2018-07-24 12:28:02
【问题描述】:

我正在运行以下代码:

import cv2
import numpy
f = open("raw_image",'rb')
raw_image = f.read(720 * 1280 * 3)
image = numpy.fromstring(raw_image, dtype='uint8')
image = image.reshape((720, 1280, 3))
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)

我得到了这个结果: 该图像是 RGB 图像,高度为 720p,宽度为 1280。 任何想法如何解决它?

编辑:我从分辨率为 720x1280 的相机接收图像。图像是彩色图像。我从中读取字节的文件raw_image 包含命令的输出:

gst-launch-1.0 fdsrc ! h264parse ! avdec_h264 ! filesink location=/dev/stdout

如您所见,接收到的图像格式错误,我不知道如何修复它。

EDIT2:这是原始图像:https://drive.google.com/file/d/1hPRUEVNFiKmiUFbzksUlzzC04teml4hw/view?usp=sharing

EDIT3: 运行代码后(注意:我只显示前 720*1280 字节):

raw_image = f.read(720 * 1280 * 3)
raw_image=raw_image[:720 * 1280]
image=numpy.frombuffer(raw_image,dtype='uint8')
image = image.reshape((720,1280))
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)

我得到了这个结果: 当我将左侧的一些部分向右移动时,添加以下行:

image=numpy.concatenate((image[:,141:],image[:,:141]),axis=1)

我得到了一个很好的图像:

它能帮助解开谜团吗?

【问题讨论】:

  • 对不起,你的问题不是很清楚,你想达到什么目标?为什么要将图像重塑为相同的尺寸? CV2 显示这个扭曲的图像是你的问题吗?
  • 我添加了更多信息:)
  • 这个命令gst-launch-1.0 fdsrc ! h264parse ! avdec_h264 ! filesink location=/dev/stdout 有什么作用?它对扭曲图像负责吗?你先验证了吗?
  • 可以分享一下图片吗?然后人们可以在没有猜测的情况下进行工作。谢谢。
  • 完成!好主意!

标签: python-3.x opencv cv2


【解决方案1】:

如果您在终端中使用 ImageMagick 生成这样的红蓝渐变,您将看到您的代码运行良好:

convert -size 1280x720 gradient:red-blue -depth 8 rgb:raw_image


我推断你的gst 的东西是“不开心”


您分享的图片包含以下内容:

我使用 ImageMagick 将其转换为 JPEG,就像在终端中一样:

convert -size 1280x720 -depth 8 rgb:raw_image.dms result.jpg

我再次推断您的gst 内容是“不开心”

【讨论】:

  • 我不确定 gst 工作人员是否不高兴,因为我可以从它的输出中得到一张漂亮的图像(见 EDIT3),你知道为什么会这样吗?
  • 您的代码在我生成的正确数据上运行良好。您提供给我的gst 数据和您自己使用的数据都生成了不正确的图像。结论和我的回答是,您的 Python 是正确的,而您的 gst-streamed 数据中有错误。
  • 当我使用代码时:gst-launch-1.0 fdsrc ! h264parse ! avdec_h264 ! filesink location=/dev/stdout 我得到了显示的结果。但是,当我使用代码时:gst-launch-1.0 fdsrc fd=0 ! h264parse ! avdec_h264 ! xvimagesink sync=false 它工作得很好,但是图像显示在单独的寡妇上(而不是使用 opncv)。这就是我认为gst 的输出很好的原因
  • 转到生成图像的处理链的另一端。生成随机数据的图像并将相同的图像发送 1,000 次。在接收端,拾取每一帧并保存为原始数据,无需任何处理。为所有文件生成 md5 校验和,看看它们是否都相同。
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 2015-10-16
  • 2020-08-01
  • 1970-01-01
  • 2019-05-23
  • 2013-01-21
  • 2020-08-14
  • 1970-01-01
相关资源
最近更新 更多