比较差异 图片 视频

news/2024/10/11 20:08:23/文章来源:https://blog.csdn.net/jacke121/article/details/141947931

目录

两张图片像素差:

深度图和rgb图对齐

视频比较差异:

结构化(1行)贴到深度图上(5行):


两张图片像素差:

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))

结构化(1行)贴到深度图上(5行):


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.ldbm.cn/p/441459.html

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

相关文章

稀土紫外屏蔽剂:防晒护肤品

稀土紫外屏蔽剂在防晒护肤用品领域的应用越来越受到关注。稀土紫外屏蔽剂主要利用稀土元素的特殊光学特性来阻挡或吸收紫外线&#xff0c;从而保护皮肤免受紫外线伤害。以下是稀土紫外屏蔽剂在防晒护肤用品中的主要优势和作用&#xff1a; 高效紫外线吸收&#xff1a;稀土元素如…

OgPhone云手机客户案例:月增曝光2亿+,运营效率提升30%

本文将介绍某国际营销客户如何通过OgPhone云手机及SD-WAN解决方案&#xff0c;成功提升广告投放曝光量并大幅提升运营效率的案例。 客户背景及需求 该客户是一家国际知名的营销服务提供商&#xff0c;旗下拥有多个分公司和项目组&#xff0c;负责为不同行业的企业提供全球化营销…

DSC+DW自动安装工具

DSCDW自动安装工具 本次进行DSCDW的自动安装工具的使用&#xff0c;这里先安装一份两节点的DSC集群。 1.前期准备 1.1环境准备 数据库安装 两个节点上都得安装好DM数据库&#xff0c;暂时不用初始化实例&#xff0c;版本、安装路径都要一致 操作系统 两个都是使用的CentOS7…

从用户反馈看相亲交友平台的设计缺陷及改进方向

相亲交友平台在现代社会中扮演着越来越重要的角色&#xff0c;尤其是在数字化时代&#xff0c;它们通过智能匹配算法帮助用户找到潜在的伴侣&#xff0c;并提供了一系列功能来增强用户体验开发h17711347205。以下是对相亲交友平台用户体验的一些分析&#xff1a; 用户界面设计…

基于SpringBoot+Vue+MySQL的校园食堂订餐

系统展示 用户前台界面 管理员后台界面 系统背景 随着信息技术的飞速发展和互联网的普及&#xff0c;传统校园食堂的运作模式已难以满足现代学生日益增长的便捷性、个性化需求。学生们希望能够在忙碌的学习生活中&#xff0c;通过更加高效、便捷的方式完成就餐选择&#xff0c;…

python-古籍翻译

题目描述 小理跑到外星人的图书馆去读书。有一本外星古籍&#xff0c;里面的内容是用八进制写成的&#xff1b;但小理只能处理十六进制的数据。请你帮忙写一个翻译软件&#xff0c;帮小理把八进制串翻译成十六进制串。 输入 仅一行&#xff0c;一个八进制字符串 s&#xff0…

外包干了三年,快要废了。。。

先简单说一下自己的情况&#xff0c;普通本科&#xff0c;在外包干了3年多的功能测试&#xff0c;这几年因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境真的会…

数据库:读写分离

一、什么是读写分离&#xff1f; 见名思意&#xff0c;根据读写分离的名字&#xff0c;我们就可以知道&#xff1a;读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话&#xff0c;就能够小幅提升写性能&#xff0c;大幅提升读性能。 我简单画了一张…

4.qml单例模式

这里写目录标题 js文件单例模式qml文件单例模式 js文件单例模式 直接添加一个js文件到qml中 修改内容 TestA.qml import QtQuick 2.0 import QtQuick.Controls 2.12 import "./MyWork.js" as MWItem {Row{TextField {onEditingFinished: {MW.setA(text)}}Button…

mycat双主高可用架构部署-水评分表-枚举分片配置

MySQL5.7服务器IP是192.168.31.209及192.168.31.210 vi /usr/local/mycat/conf/schema.xml <?xml version"1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat"http://io.mycat/"><schema n…

Mysql系列-索引简介

索引是排好序的数据结构 1 索引数据结构 hash索引、二叉树、平衡二叉树、B-Tree、BTree 数据结构在线示例&#xff1a;点击跳转 2 索引类型 2.1 聚簇索引 又叫“聚集索引” &#xff0c;索引和数据存储在一起 2.2 非聚簇索引 又叫“非聚集索引” &#xff0c;索引和数据分开…

Leetcode 188. 买卖股票的最佳时机 Ⅳ 状态机dp C++实现

Leetcode 188.买卖股票的最佳时机 Ⅳ 问题&#xff1a;给你一个整数数组 prices 和一个整数 k &#xff0c;其中 prices[i] 是某支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说&#xff0c;你最多可以买 k 次&…

基于协同过滤算法+SpringBoot+Vue+MySQL的商品推荐系统

系统展示 用户前台界面 管理员后台界面 系统背景 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛运用&#xff0c;以及…

【DCL】Dual Contrastive Learning for General Face Forgery Detection

文章目录 Dual Contrastive Learning for General Face Forgery Detectionkey points:贡献方法数据视图生成对比学习架构实例间对比学习实例内对比学习总损失函数实验实验细节定量结果跨数据集评估跨操作评估消融实验可视化Dual Contrastive Learning for General Face Forgery…

828华为云征文|基于Flexus X加速MySQL镜像搭建XXL-JOB任务调度平台

目录 前言 一、Flexus云服务器X介绍 1.1 Flexus云服务器X实例简介 1.2 Flexus云服务器X实例特点 1.3 Flexus云服务器X实例场景需求 二、Flexus云服务器X购买 2.1 Flexus X实例购买 2.2 购买MySQL加速镜像 2.3 重置密码 2.4 登录服务器 二、外部访问连接MySQL 3.1 修改MySQL密码…

【新闻转载】2023至2024年全球勒索病毒攻击我国机构数量激增,制造业成主要受害者

记者于9月5日在第二届网络空间安全&#xff08;天津&#xff09;论坛上了解到&#xff0c;2023年7月至2024年6月&#xff0c;全球共有26个勒索病毒组织对我国71家机构发起攻击并实施勒索&#xff0c;同比增加了100%。 勒索病毒是通过加密或阻止用户访问系统或数据的方式&#x…

Jmeter模拟用户登录时获取token如何跨线程使用?

一、用户定义的变量 1、添加"用户定义的变量" 2、填写"host、port" 二、setUp线程组 1、添加"setUp线程组" 2、设置循环次数"100" 三、CSV 数据文件设置 1、添加"CSV 数据文件设置" 2、填写信息"用户登录数据.csv、…

基于Java+SpringBoot+Vue+MySQL的西安旅游管理系统网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的西安旅游管理系统网站【附源码文档】、…

通过IDEA的Maven插件清理maven依赖缓冲

问题 有时候&#xff0c;在IDEA编程的时候&#xff0c;会遇到2个服务都依赖同一个模块&#xff0c;但是&#xff0c;其中有1个服务没有生效&#xff0c;但是&#xff0c;在CLI的maven中检查依赖树&#xff0c;没有任何问题&#xff0c;但是在IDEA中那个服务始终就是没有生效。…

光影漫游者:全球音乐厅建设的创新先锋—轻空间

在全球文化和艺术日益交融的背景下&#xff0c;音乐厅作为展现音乐与文化交流的重要载体&#xff0c;其设计与建设尤为关键。光影漫游者凭借卓越的技术与设计理念&#xff0c;积极进军海外市场&#xff0c;成为全球音乐厅建设领域的创新先锋。 以卓越声学技术为基础&#xff0c…