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

Python-Opencv图像处理的小坑

1.背景

        最近在做一点图像处理的事情,在做处理时的cv2遇到一些小坑,希望大家遇到的相关的问题可以注意!!

2. cv2.imwrite保存图像

          cv2.imwrite(filename, img, [params])

  • filename:需要写入的文件名,包括路径和文件名,以及期望的扩展名(例如,.jpg,.png,.bmp等)。
  • img:需要保存的图像数据。这通常是通过其他OpenCV函数(如cv2.imread()cv2.cvtColor()等)获得的NumPy数组。
  • params:这是一个可选参数,用于指定JPEG或PNG格式的压缩级别等。对于其他格式,此参数将被忽略。默认值为空列表[]

cv2.imwrite('output.jpg', img, [int(cv2.IMWRITE_JPEG_QUALITY), 50])

        将JPEG的压缩质量设置为50(最高质量为100),然后将图像保存为新的文件'output.jpg'。这样保存的图像将具有较低的质量和较小的文件大小。

        需要注意的是,这种压缩方法是有损的,也就是说,压缩过程中会丢失一些图像信息。因此,压缩后的图像可能无法完全还原为原始图像。在实际应用中,需要根据需求和图像类型来权衡压缩质量和文件大小。

坑1:cv2.imshow显示白茫茫的问题

     cv2.imwrite()函数在保存图像时,通常会将图像数据的dtype(数据类型)转换为8位无符号整数类型(即dtype为uint8,而cv2.imshow不会处理图像成uint8,例如模型推理出来是float32类型,如果用cv2.imshow显示灰度图像的话就会出现白茫茫一片!!!

cv2.imshow显示

cv2.imwrite保存的图片

        思路一:直接float32转uint8!!回答:可以!但效果不好

image = image.astype(np.uint8)

       在轮廓边边的时候会出现锯齿!!!(图像中偏白的线条很明显)

思路二:先归一化再转uint8呢? 回答:可以!效果很好!!!

image =  cv2.normalize(image, None, 0, 255, cv2.NORM_MINMAX)

image = image.astype(np.uint8)

        现在可以知道cv2.imwrite使用了归一化和类型转换

注意:使用cv2.imshow后面要跟着cv2.waitKey(0)或者下面的代码,不然会出现不显示的问题。

if cv2.waitKey(1) & 0xFF == ord('q'):

        break

3. cv2保存视频

cap = cv2.VideoCapture('test.mp4')
# 检查视频是否成功打开
if not cap.isOpened():print("Error: Couldn't open the video file.")return# 获取视频的帧率
fps = cap.get(cv2.CAP_PROP_FPS)
# 设置视频编码器并创建输出视频对象
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 选择适当的编码器,例如'XVID', 'MJPG', 'MP4V', 等等
out = cv2.VideoWriter('output_file.avi', fourcc, fps,  (352, 288), isColor=False)
while cap.isOpened():ret, frame = cap.read()  # 读取下一帧# 图片数据前处理if not ret:breakimg = data_pre_processing(frame)compressed_data = sess.run(outputs_name, {input_name: img})compressed_image = data_post_processing(compressed_data)compressed_image = cv2.normalize(compressed_image, None, 0, 255, cv2.NORM_MINMAX)compressed_image = compressed_image.astype(np.uint8)out.write(compressed_image)# 释放资源并关闭视频文件
cap.release()
out.release()

坑2:保存灰度视频出错        

        我在数据后处理时使用了下面的代码,将rgb转成了灰度图像,但是cv2保存视频默认是rgb的,导致保存的视频只有几KB的错误视频。

cv2.cvtColor(compressed_image, cv2.COLOR_RGB2GRAY)

解决思路:查文档的api使用

cv2.VideoWriter中的isColor参数

  • isColor=False: 指定输出视频是否为彩色。isColor被设置为False,表示输出视频将是灰度的(即不是彩色的)。如果你希望输出彩色视频,应该将其设置为True。默认是彩色的

相关文章:

Python-Opencv图像处理的小坑

1.背景 最近在做一点图像处理的事情,在做处理时的cv2遇到一些小坑,希望大家遇到的相关的问题可以注意!! 2. cv2.imwrite保存图像 cv2.imwrite(filename, img, [params]) filename:需要写入的文件名,包括路…...

[LCTF 2018]bestphp‘s revenge

文章目录 前置知识call_user_func()函数session反序列化PHP原生类SoapClient 解题步骤 前置知识 call_user_func()函数 把第一个参数作为回调函数调用 eg:通过函数的方式回调 <?php function barber($type){echo "you wanted a $type haircut, no problem\n";}c…...

HTML中常用表单元素使用(详解!)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中常用表单元素使用以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题可以在评论区留言 …...

掌握C++模板的艺术:类型参数、默认值和自动推导

掌握C模板的艺术:类型参数、默认值和自动推导 模板参数 类型模板参数 在 Grid 示例中&#xff0c;Grid 模板有一个模板参数&#xff1a;存储在网格中的类型。编写类模板时&#xff0c;您需要在尖括号内指定参数列表&#xff0c;例如&#xff1a; template <typename T&g…...

Unity_使用FairyGUI搭建登录页面

Unity_使用FairyGUI搭建登录页面 1. 使用FairyGUI准备一个UI界面&#xff0c;例如&#xff1a;以下登录 2. 发布导出&#xff08;发布路径设置为Unity的Asset下任何路径&#xff09; 3. Unity编辑器安装FairyGUI包资源&#xff08;在资源商店找见并存储为我的资源&#xff0c;…...

百岁时代即将来临,原知因成为消费新潮流

什么叫长寿时代?泰康保险首席执行官陈东升指出&#xff1a;长寿时代&#xff0c;就是百岁人生即将来临&#xff0c;人人带病长期生存。而在这个时代&#xff0c;人类最大的变化在于“生命尺度的改变”&#xff0c;比如过去20岁是年轻人&#xff0c;40岁中年人&#xff0c;60岁…...

16:00的面试,16:07就出来了,问的问题过于变态了。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到六月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40…...

VUE宝典之el-dialog使用

文章目录 &#x1f341;前言&#x1f341;el-dialog简介&#x1f341;el-dialog属性&#x1f341;el-dialog示例&#x1f341;父子组件值传递示例 &#x1f341;前言 el-dialog是Element UI库中的一个重要组件&#xff0c;用于在Vue应用程序中创建弹出框。它提供了一组实用的属…...

Cocos Creator:坐标系

Cocos Creator&#xff1a;坐标系 坐标系节点位置坐标转换v3.8 实现原理&#xff08;不想了解可以直接跳过&#xff09;简单示例&#xff1a;&#xff08;干货or解决方案在这里&#xff01;&#xff09; 锚点缩放和旋转 总结心得 在 Cocos Creator 3.8 中&#xff0c;节点坐标系…...

logback日志框架使用

依赖引入 <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.7</version> </dependency> 使用logback日志框架只需要引入以上即可&#xff0c;(我们平时使用较多的Slf4j…...

【八】python装饰器模式

文章目录 8.1 装饰器模式简介8.2 装饰器模式作用8.3 装饰器模式构成8.3.1 装饰器模式包含以下几个核心角色&#xff1a;8.3.2 UML类图 8.4 装饰器模式python代码实现8.4.1 基本装饰器的使用8.4.2 多个装饰器的执行顺序8.4.3 带返回值的装饰器的使用8.4.4 装饰器模式-关联类模式…...

Unity-小工具-LookAt

Unity-小工具-LookAt &#x1f959;介绍 &#x1f959;介绍 &#x1f4a1;通过扩展方法调用 gameObject.LookAtTarget&#xff0c;让物体转向目标位置 &#x1f4a1;gameObject.StopLookat 停止更新 &#x1f4a1;可以在调用时传入自动停止标记&#xff0c;等转向目标位置后自…...

TCP实现一对一聊天

一&#xff0c;创建类 二&#xff0c;类 1.ChatSocketServer类 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Sca…...

全面高压化与全面超快充,破解新能源汽车的时代难题

是什么让新能源车主感到疲惫与焦虑&#xff1f;是什么阻挡更多消费者选择新能源汽车&#xff1f;我们在身边进行一个简单的调查就会发现&#xff0c;问题的答案非常一致&#xff1a;充电。 充电难&#xff0c;充电慢的难题&#xff0c;始终是困扰新能源汽车产业发展&#xff0c…...

02 CSS基础入门

文章目录 一、CSS介绍1. 简介2. 相关网站3. HTML引入方式 二、选择器1. 标签选择器2. 类选择器3. ID选择器4. 群组选择器 四、样式1. 字体样式2. 文本样式3. 边框样式4. 表格样式 五、模型和布局1. 盒子模型2. 网页布局 一、CSS介绍 1. 简介 CSS主要用于控制网页的外观&#…...

MyBatis框架中的5种设计模式总结

前言 MyBatis框架中使用的5种设计模式分别是&#xff1a;1、建造者模式&#xff08;生成器模式&#xff09;。2、工厂模式。3、单例模式。4、代理模式。5、适配器模式。 1、建造者模式&#xff08;生成器模式&#xff09; 在MyBatis环境的初始化过程中&#xff0c;SqlSessio…...

ffmpeg相关命令

视频转码 dav转化为mp4格式 ffmpeg -i 2021-08-10.dav -codec copy 11.mp4二进制文件转为mp4格式 // -c:v 指定视频流编码器&#xff0c;不指定编码会默认用mp4这种容器的默认音视频编码进入编码 // copy&#xff1a;不重新编码直接copy源视频流ffmpeg -i 1701687125-4fc72a…...

锂电3V升12V1A升压芯片WT3209

锂电3V升12V1A升压芯片WT3209 WT3209是一款高功率密度全集成BOOST升压转换器&#xff0c;具备高效能解决方案。3V升12V1A,5V升12V1A WT3209内部集成的功率MOSFET管导通电阻为上管13mΩ和下管11mΩ&#xff0c;具备2A开关电流能力&#xff0c;并且能够提供高达12.6V的输出电压。…...

Unity 置顶OpenFileDialog文件选择框

置顶文件选择框 &#x1f32d;处理前&#x1f959;处理后 &#x1f32d;处理前 &#x1f959;处理后 解决方案...

oomall课堂笔记

一、项目分层结构介绍 controller层&#xff08;控制器层&#xff09;&#xff1a; 作用&#xff1a;负责输出和输入&#xff0c;接收前端数据&#xff0c;把结果返回给前端。 1.处理用户请求&#xff0c;接收用户参数 2.调用service层处理业务&#xff0c;返回响应 servi…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...