当前位置: 首页 > news >正文

免费职业技能培训网站建设网站的费用如何账务处理

免费职业技能培训网站,建设网站的费用如何账务处理,查公司的国家网站有哪些,快手自媒体平台OpenCv read / write video color differenceOpenCv读/写视频色差 感谢博主: OpenCv读/写视频色差答案 - 爱码网 有没有办法让 OpenCV 使用正确的转换?? 是的,使用 GStreamer 后端而不是 FFmpeg 后端,颜色看起来很完…

OpenCv read / write video color differenceOpenCv读/写视频色差

感谢博主:

OpenCv读/写视频色差答案 - 爱码网

  • 有没有办法让 OpenCV 使用正确的转换??

  • 是的,使用 GStreamer 后端而不是 FFmpeg 后端,颜色看起来很完美。默认情况下,OpenCV 不是使用 GStreamer 构建的(至少在 Windows 中不是)。我使用 GStreamer 从源代码构建 OpenCV(在下载并安装 GStreamer 之后)...

【解决方案1】:

使用 FFmpeg 后端读取视频帧时,OpenCV VideoCapture 中存在错误。

当 H.264 视频流标记为BT.709 颜色标准时,该错误会导致“颜色偏移”。


主题太重要了,无法回答...
这篇文章的重要部分是重现问题,并证明问题是真实的。

我找到的解决方案是选择 GStreamer 后端而不是 FFmpeg 后端。 建议的解决方案有缺点(例如需要构建支持 GStreamer 的 OpenCV)。

注意:

  • 在 Windows 10 下使用 OpenCV 4.53 可以重现该问题。
    该问题在 Ubuntu 18.04 下也可重现(在 Python 中使用 OpenCV)。
    该问题适用于 BT.709 颜色标准的“全范围”和“有限范围”。

构建合成视频模式以重现问题:
我们可以使用FFmpeg 命令行工具创建合成视频作为输入。
以下命令生成一个带有 H.264 编解码器和 BT.709 颜色标准的 MP4 视频文件:

ffmpeg -y -f lavfi -src_range 1 -color_primaries bt709 -color_trc bt709 -colorspace bt709 -i testsrc=size=192x108:rate=1:duration=5 -vcodec libx264 -crf 17 -pix_fmt yuv444p -dst_range 1 -color_primaries bt709 -color_trc bt709 -colorspace bt709 -bsf:v h264_metadata=video_full_range_flag=1:colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1 bt709_full_range.mp4
  • 上述命令使用 yuv444p 像素格式(而不是 yuv420p)来获得更纯的颜色。
  • 参数-bsf:v h264_metadata=video_full_range_flag=1:colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1 使用Bitstream Filter 将H.264 流标记为“全范围”BT.709。

使用MediaInfo工具,我们可以查看以下颜色特征:

colour_range:             Full 
colour_primaries:         BT.709 
transfer_characteristics: BT.709 
matrix_coefficients:      BT.709 

使用 OpenCV 捕获视频

以下 C++ 代码抓取第一帧,并将其保存到1.png 图像文件:

#include "opencv2/opencv.hpp"void main()
{   cv::VideoCapture cap("bt709_full_range.mp4");cv::Mat frame;    cap >> frame;cv::imwrite("1.png", frame);cap.release();    
}

我们也可以使用以下 Python 代码:

import cv2cap = cv2.VideoCapture('bt709_full_range.mp4')
_, frame = cap.read()
cv2.imwrite('1.png', frame)
cap.release()

使用 FFmpeg 将bt709_full_range.mp4 转换为图像序列:

ffmpeg -i bt709_full_range.mp4 -pix_fmt rgb24 %03d.png

第一个“提取”帧的文件名为001.png


比较结果:

  • 左边是1.png(OpenCV的结果)
  • 右边是001.png(FFmpeg命令行工具的结果)

如您所见,颜色不同。

  • OpenCV 的红色像素值是 RGB = [232, 0, 3]
  • FFmpeg的红色像素值是RGB = [254, 0, 0].
    原始的 RGB 值可能是[255, 0, 0](由于颜色转换,值是 254)。

如您所见,OpenCV 颜色是错误的!


解决方案 - 选择 GStreamer 后端而不是 FFmpeg 后端:

默认的 OpenCV 版本不包括 GStreamer 支持(至少在 Windows 中)。

您可以使用以下instruction 使用 GStreamer 构建 OpenCV。


这是一个使用 GStreamer 后端抓取第一帧的 C++ 代码示例:

void main()
{   cv::VideoCapture cap("filesrc location=bt709_full_range.mp4 ! decodebin ! videoconvert ! appsink", cv::CAP_GSTREAMER);cv::Mat frame;    cap >> frame;cv::imwrite("1g.png", frame);cap.release();
}

结果:

  • 左边是1g.png(OpenCV使用GStreamer的结果)
  • 右边是001.png(FFmpeg命令行工具的结果)

使用 GStreamer 的 OpenCV 红色像素的值是 RGB = [254, 0, 1]。 (由于颜色转换,蓝色为 1 而不是零)。


结论:

  • 使用 GStreamer 后端(而不是 FFmpeg)后端似乎可以解决“颜色偏移”问题。
  • OpenCV 用户需要注意颜色偏移问题。
  • 让我们希望 OpenCV 开发人员(或 FFmpeg 插件开发人员)解决这个问题。

【讨论】:

  • 很好,效果很好!顺便说一句,GStreamer 并不真正适合未流式传输的视频,因为它很难在给定位置检索帧。但是,出于与您介绍的相同原因,使用 MicrosoftMedia Foundation 作为后端也可以很好地工作。 cv::VideoCapture cap(video_path, cv::CAP_MSMF);

http://www.yayakq.cn/news/598712/

相关文章:

  • 网站开发范围说明书怎样搭建大型企业网络
  • 网站的做网站的公司网站数字化建设方案
  • 网站域名归属权大连建网站
  • 中国建设服务信息网站平面设计是做什么的啊
  • 闸北区网站设计与制wordpress左侧导航菜单
  • 做暧暧暖网站婚庆网站设计说明书
  • 河北网站建设费用关于怎样把网站建设好的一些建议
  • 做房地产要自己开网站温州网站建设专业的公司
  • 百度秒收录技术百度关键词seo年度费用
  • 视频网站文案cod单页建站工具
  • 网站设计培训费用是多少河南国基建设集团有限公司网站
  • 网站做影集安全吗个人主页介绍文案
  • 徐州网站制作方案网站建设解说词
  • 个人免费设计网站wordpress开启会员注册
  • 在线教育类网站模板软文例文 经典软文范例
  • 大型行业网站wordpress建站linux
  • 外链 网站权重做学校网站素材图片素材
  • 做正品的汽配网站如何做合作社网站
  • 网站建设框架都有哪些内容wordpress里面的rss订阅
  • 怎么样做国外推广网站内蒙古网站开发
  • 写文章的网站网站建设主流技术及效果
  • 重庆网站备案查询系统Html5做旅游网站的设计思路
  • 计算机本科论文 网站建设网站栏目做跳转
  • 外贸人常用网站本科自考研究生怎么考
  • 无忧网站建设哪家好网络推广计划书范文
  • 在招聘网站做电话销售怎么样免费在线网站
  • 高端旅游定制网站长春网站搭建
  • 怎么看小企业网站建设大连建设局网站
  • 做ae动图的网站wordpress国外主题2016
  • 大良网站智能推广价格公司注册代理免费