比较差异 图片 视频

目录

两张图片像素差:

深度图和rgb图对齐

视频比较差异:

拼接2:


两张图片像素差:

diff=np.clip(np.abs( img_mask.astype(np.int16))-img.astype(np.int16), 0, 255).astype(np.uint8)

深度图和rgb图对齐

# -*- coding: utf-8 -*-
import glob
import osimport cv2
from moviepy.editor import VideoFileClip
import numpy as np
from natsort import natsorted
from moviepy.editor import ImageSequenceClipdef check_file_size(file_path, size_level=0.5 * 1000):file_size = os.path.getsize(file_path)if file_size < size_level:return False, file_sizereturn True, file_sizeif __name__ == '__main__':dir_a = r'C:\Users\Administrator\Downloads\v_turn_left\v_turn_left'dir_a = r'C:\Users\Administrator\Downloads\v_turn_left_box\v_turn_left'dir_a = r'C:\Users\Administrator\Downloads\v_turn_right\v_turn_right'dir_a = r'C:\Users\Administrator\Downloads\HLX33B12XP07413111706257257828\HLX33B12XP07413111706257257828\trajectory_data\v_turn_left'dir_a = r'C:\Users\Administrator\Downloads\v_turn_left_rgb\v_turn_left'dirs = glob.glob(dir_a+ '/*')out_dir_base = f'{os.path.dirname(dir_a)}/pinjie/'os.makedirs(out_dir_base, exist_ok=True)for dir_m in dirs:if not os.path.isdir(dir_m):continueimg_files = ['%s/%s' % (i[0].replace("\\", "/"), j) for i in os.walk(dir_m) for j in i[-1] if j.endswith(('_mask.jpg', 'xpng', 'jpeg'))]img_files=natsorted(img_files)out_dir=out_dir_base+ os.path.basename(dir_m)imgs=[]for img_i, file in enumerate(img_files):print(img_i, file)img_ = cv2.imread(file)lane_path=file.replace('_mask.jpg','.png')lane_img=cv2.imread(lane_path)lane_img = cv2.cvtColor(lane_img, cv2.COLOR_BGR2RGB)pic_w = 960pic_h = 576# 加载背景图片和前景图片background = img_.copy()foreground =lane_imgh, w = foreground.shape[:2]# 创建前景图片的掩码,掩码区域为黑色部分# 这里我们假设前景图的黑色部分是完全黑色(RGB值全为0)black_mask = cv2.inRange(foreground, np.array([0, 0, 0]), np.array([10, 10, 10]))# 创建反掩码foreground_mask = cv2.bitwise_not(black_mask)# 使用掩码将前景图片中的黑色部分去除foreground_no_black = cv2.bitwise_and(foreground, foreground, mask=foreground_mask)# 获取前景图片的区域roi = background[0:h, 0:w]# 创建背景的反掩码background_mask = cv2.bitwise_not(foreground_mask)# 使用反掩码将背景图片的对应区域去除background_no_foreground = cv2.bitwise_and(roi, roi, mask=background_mask)# 将前景图片粘贴到背景图片result = cv2.add(background_no_foreground, foreground_no_black)background[0:h, 0:w] = result# cv2.imshow('background', background)# cv2.imshow('foreground', foreground)new_img = np.vstack((foreground,img_, background))new_img=cv2.cvtColor(new_img, cv2.COLOR_BGR2RGB)imgs.append(new_img)if 0:if max(new_img.shape[:2]) > 1200:x_scale = 1200 / max(new_img.shape[:2])new_img = cv2.resize(new_img, None, fx=x_scale, fy=x_scale, interpolation=cv2.INTER_AREA)cv2.imwrite(out_dir+os.path.basename(file), new_img)cv2.imshow('rss', new_img)cv2.waitKey(1)image_sequence_clip = ImageSequenceClip(imgs, fps=6)# 输出为视频文件image_sequence_clip.write_videofile(out_dir+".mp4", codec="libx264")

视频比较差异:

import glob
import osfrom moviepy.editor import VideoFileClip
import numpy as npdef check_file_size(file_path, size_level=0.5 * 1000):file_size = os.path.getsize(file_path)if file_size < size_level:return False, file_sizereturn True, file_sizedef process_frame(frame):# 获取帧的宽度和高度height, width, _ = frame.shapewidth_part=960h_part=576# 前两列: 左半部分 (前 width // 2 列)part1_2 = frame[h_part:h_part*2, :width_part, :]part1_3 = frame[h_part*2:h_part*3, :width_part, :]part2_2 = frame[h_part:h_part*2, width_part:width_part*2, :]part2_3 = frame[h_part*2:h_part*3, width_part:width_part*2, :]part3_2 = frame[h_part:h_part*2, width_part*2:width_part*3, :]part3_3 = frame[h_part*2:h_part*3,width_part*2:width_part*3, :]pic_right=np.zeros((2880,960,3),dtype=np.uint8)pic_right[h_part:h_part*2]= np.clip(np.abs(part1_2.astype(np.int16) - part1_3.astype(np.int16)), 0, 255).astype(np.uint8)pic_right[h_part*2:h_part*3]= np.clip(np.abs(part2_2.astype(np.int16) - part2_3.astype(np.int16)), 0, 255).astype(np.uint8)pic_right[h_part*3:4*h_part]= np.clip(np.abs(part3_2.astype(np.int16) - part3_3.astype(np.int16)), 0, 255).astype(np.uint8)# 将原帧与差值列拼接new_frame = np.concatenate((frame, pic_right), axis=1)return new_framedir_ar=r'C:\Users\Administrator\Downloads\liauto_fv_960_arrow_36_6f_150_depth_nomask,mask_e20_e30\aa'fils=glob.glob(os.path.join(dir_ar,'*.mp4'))out_dir=r'C:\Users\Administrator\Downloads\liauto_fv_960_arrow_36_6f_150_depth_nomask,mask_e20_e30/diff/'
os.makedirs(out_dir,exist_ok=True)
for file in fils:size_ok,_= check_file_size(file)if size_ok:video = VideoFileClip(file)# 对每一帧应用帧处理函数new_video = video.fl_image(process_frame)# 保存处理后的视频new_video.write_videofile(out_dir+os.path.basename(file))

拼接2:


import glob
import osimport cv2
from moviepy.editor import VideoFileClip
import numpy as npdef check_file_size(file_path, size_level=0.5 * 1000):file_size = os.path.getsize(file_path)if file_size < size_level:return False, file_sizereturn True, file_sizedef process_frame(frame):pic_w=960pic_h=576# 加载背景图片和前景图片background =frame[pic_h*4:] .copy()foreground =frame[:pic_h] .copy()h, w = foreground.shape[:2]# 创建前景图片的掩码,掩码区域为黑色部分# 这里我们假设前景图的黑色部分是完全黑色(RGB值全为0)black_mask = cv2.inRange(foreground, np.array([0, 0, 0]), np.array([10, 10, 10]))# 创建反掩码foreground_mask = cv2.bitwise_not(black_mask)# 使用掩码将前景图片中的黑色部分去除foreground_no_black = cv2.bitwise_and(foreground, foreground, mask=foreground_mask)# 获取前景图片的区域roi = background[0:h, 0:w]# 创建背景的反掩码background_mask = cv2.bitwise_not(foreground_mask)# 使用反掩码将背景图片的对应区域去除background_no_foreground = cv2.bitwise_and(roi, roi, mask=background_mask)# 将前景图片粘贴到背景图片result = cv2.add(background_no_foreground, foreground_no_black)background[0:h, 0:w] = resultpic_right = np.zeros((pic_h*5, pic_w, 3), dtype=np.uint8)pic_right[pic_h*2:pic_h*3] = frame[pic_h*3:pic_h*4]pic_right[pic_h*4:] = backgroundnew_frame = np.concatenate((frame, pic_right), axis=1)top_part = new_frame[:pic_h*3]bottom_part = new_frame[pic_h*4:]# 将上半部分和下半部分拼接new_img = np.vstack((top_part, bottom_part))# cv2.imshow('frame', new_img)# cv2.waitKey(0)return new_img# 获取帧的宽度和高度height, width, _ = frame.shapewidth_part=960h_part=576# 前两列: 左半部分 (前 width // 2 列)part1_2 = frame[h_part:h_part*2, :width_part, :]part1_3 = frame[h_part*2:h_part*3, :width_part, :]part2_2 = frame[h_part:h_part*2, width_part:width_part*2, :]part2_3 = frame[h_part*2:h_part*3, width_part:width_part*2, :]part3_2 = frame[h_part:h_part*2, width_part*2:width_part*3, :]part3_3 = frame[h_part*2:h_part*3,width_part*2:width_part*3, :]pic_right=np.zeros((2880,960,3),dtype=np.uint8)pic_right[h_part:h_part*2]= np.clip(np.abs(part1_2.astype(np.int16) - part1_3.astype(np.int16)), 0, 255).astype(np.uint8)pic_right[h_part*2:h_part*3]= np.clip(np.abs(part2_2.astype(np.int16) - part2_3.astype(np.int16)), 0, 255).astype(np.uint8)pic_right[h_part*3:4*h_part]= np.clip(np.abs(part3_2.astype(np.int16) - part3_3.astype(np.int16)), 0, 255).astype(np.uint8)# 将原帧与差值列拼接new_frame = np.concatenate((frame, pic_right), axis=1)return new_frameif __name__ == '__main__':dir_a=r'C:\Users\Administrator\Downloads\liauto_fv_960_arrow_36_9f_150_depth_real_e20_test\liauto_fv_960_arrow_36_9f_150_depth_real_e20_test'mp4s=glob.glob(os.path.join(dir_a,'*.mp4'))out_dir = r'C:\Users\Administrator\Downloads\liauto_fv_960_arrow_36_9f_150_depth_real_e20_test/pinjie/'os.makedirs(out_dir, exist_ok=True)for file in mp4s:size_ok, _ = check_file_size(file)if size_ok:video = VideoFileClip(file)# 对每一帧应用帧处理函数new_video = video.fl_image(process_frame)# 保存处理后的视频new_video.write_videofile(out_dir + os.path.basename(file))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.7(QT.Day 1)

一、自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 要求&#xff1a;每行代码都有注释 【需要用到的图片或者动图&#xff0c;自己去网上找】 1.mywidget.h代码 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QIcon> //图…

2024全国大学省数学建模竞赛A题-原创参考论文(部分+第一问代码)

一问题重述 1.1 问题背景 "板凳龙"&#xff0c;又称"盘龙"&#xff0c;是浙闽地区的传统地方民俗文化活动。这种独特的表演艺术形式融合了中国传统龙舞的精髓和地方特色&#xff0c;展现了人们对美好生活的向往和对传统文化的传承。 在板凳龙表演中&am…

为elementui的el-date-picker时间选择器添加快捷选项

1、效果图 2、实现方法 直接在elementui的时间选择器上修改&#xff0c;添加shorcuts选项&#xff0c;但是样式要自己修改。 有几个注意点&#xff1a; 1&#xff09;如图我是选中后有显示背景颜色的&#xff0c;也就意味着要给选中的选项添加类名&#xff0c;elementui没有…

一. 从Hive开始

1. 怎么理解Hive Hive不能理解成一个传统意义上的数据库&#xff0c;应该理解成一个解决方案。 是Hadoop在hdfs和mapreduce之后才出现的一个结构化数据处理的解决方案。 Hdfs解决了大数据的存储问题&#xff0c;mapreduce解决了数据的计算问题。 一切似乎很美好。 但是使用成本…

微信小程序页面制作——个人信息

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

探索fastFM:Python中的高效推荐系统库

文章目录 &#x1f680; 探索fastFM&#xff1a;Python中的高效推荐系统库背景&#xff1a;为何选择fastFM&#xff1f;快照&#xff1a;fastFM是什么&#xff1f;安装指南&#xff1a;如何将fastFM加入你的项目&#xff1f;快速入门&#xff1a;五个基础函数的使用实战演练&am…

PWA(Progressive Web App,渐进式网络应用)

PWA&#xff08;Progressive Web App&#xff0c;渐进式网络应用&#xff09;是一种结合了 Web 和原生应用程序最佳特性的现代 Web 应用程序开发方法。PWA 旨在提供类似原生应用的用户体验&#xff0c;同时保持 Web 应用的灵活性和可访问性。 PWA 的主要特性&#xff1a; 渐进…

【音视频】播放音视频时发生了什么? 视频的编解码 H264是什么? MP4是什么?

目录 ✨播放一个视频的流程✨为什么要编码&#xff08;压缩&#xff09;视频数据&#xff1f;✨如何编码&#xff08;压缩&#xff09;数据&#x1f384;简单的例子&#x1f384;音视频编码方式&#x1f384;视频编码格式H264编码是什么&#xff1f;发展历程&#xff1f;H.264基…

ES6+ 特性,箭头函数、解构赋值、模块导入

1. 箭头函数&#xff08;Arrow Functions&#xff09; 箭头函数是 ES6 引入的一种简洁的函数定义方式。它的语法更简洁&#xff0c;并且不会绑定自己的 this 值。箭头函数通常用于简化函数表达式。 基本语法&#xff1a; const add (a, b) > a b;特点&#xff1a; 简洁…

解锁 macOS 剪贴板历史记录,高效复制、粘贴技巧

在Mac上&#xff0c;我们经常需要在不同文档之间复制和粘贴内容。然而&#xff0c;macOS自带的剪贴板只能保存最后一个复制项&#xff0c;这大大限制了我们的工作效率。幸运的是&#xff0c;一些第三方应用程序可以帮助我们查看和管理剪贴板的历史记录&#xff0c;从而提升我们…

关系的规范化与范式详解

在数据库设计中&#xff0c;关系的规范化是确保数据结构合理性、减少冗余和异常的关键步骤。如果你是一个数据库设计的初学者&#xff0c;这篇文章将为你深入浅出地讲解 关系规范化 和 范式 的核心概念&#xff0c;并通过简洁的示例帮助你加深理解。 关系的规范化&#xff1a;…

Android Manifest 权限描述大全对照表

115工具网&#xff08;115工具网-一个提供高效、实用、方便的在线工具集合网站&#xff09;提供Android Manifest 权限描述大全对照表&#xff0c;可以方便andriod开发者查看安卓权限描述功能 权限名称描述android.permission.ACCESS_CHECKIN_PROPERTIES访问登记属性读取或写入…

飞机制造5G智能工厂数字孪生工业物联平台,推进制造业数字化转型

飞机制造行业作为高端制造业的典范&#xff0c;正积极探索数字化转型的新路径。飞机制造5G智能工厂数字孪生工业物联平台&#xff08;以下简称“平台”&#xff09;的兴起&#xff0c;不仅为飞机制造业注入了强劲动力&#xff0c;更为整个制造业的数字化转型树立了新的标杆。 …

微知-BIOS中的XHCI模式是什么意思?(usb3.0的扩展控制器影响usb3.0速率等选项)

XHCI “eXtensible Host Controller Interface” “可扩展主机控制器接口”。 英特尔公司开发的一个USB主机控制器接口&#xff0c;主要面向USB 3.0&#xff0c;同时也支持USB 2.0及以下版本的设备。 是usb3.0的核心部分。 有他表示主机支持usb3.0 三种模式&#xff1a;Smart …

B: 小球反弹

目录 一&#xff1a; 二&#xff1a; 三&#xff1a; 四&#xff1a; 一&#xff1a;问题描述 有一长方形&#xff0c;长为343720 单位长度&#xff0c;宽为233333 单位长度。在其内部左上角顶点有一小球&#xff08;无视其体积&#xff09;&#xff0c;其初速度如图所示且…

Spring Boot项目中怎么构建多模块的应用

在大型项目开发中&#xff0c;将项目分解为多个模块不仅可以增强代码的可维护性&#xff0c;还能提高开发效率。Spring Boot 提供了对多模块项目的良好支持&#xff0c;使得我们可以轻松地构建复杂的企业级应用程序。在这篇文章中&#xff0c;我们将深入探讨如何在Spring Boot项…

【Rust练习】12.枚举

练习题来自&#xff1a;https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误 enum Number {Zero,One,Two, }enum Number1 {Zero 0,One,Two, }// C语言风格的枚举定义 enum Number2 {Zero 0.0,One 1.0,Two 2.0, }fn main() {// 通过 as 可以将枚举值强转…

使用FFmpeg的AVFilter转换YUV到RGB

AVFilter 是 FFmpeg 库 libavfilter 的核心组件&#xff0c;提供了一套强大的音视频处理框架&#xff0c;用于对音视频流进行复杂的过滤、转换和效果处理。通过 AVFilter&#xff0c;开发者可以构建自定义的滤镜图&#xff08;filter graph&#xff09;&#xff0c;实现各种音视…

(每日一问)操作系统:常见的 Linux 指令详解

&#xff08;每日一问&#xff09;操作系统&#xff1a;常见的 Linux 指令详解 Linux 系统作为一种开源的操作系统&#xff0c;以其高效、稳定和安全的特性&#xff0c;广泛应用于服务器、开发环境和嵌入式系统等领域。日常使用 Linux&#xff0c;掌握常见的基本指令至关重要&a…

Transformer预测 | 基于Transformer心率时间序列预测(tensorflow)

效果一览 基本介绍 Transformer预测 | 基于Transformer心率时间序列预测(tensorflow) 程序设计 import pandas as pd from pandas.plotting import lag_plot from statsmodels.graphics