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。默认是彩色的

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

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

相关文章

快速排序并不难

快速排序的核心框架是“二叉树的前序遍历对撞型双指针”。我们在《一维数组》一章提到过”双指针思路“:在处理奇偶等情况时会使用两个游标,一个从前向后,一个是从后向前来比较,根据结果来决定继续移动还是停止等待。快速排序的每…

医院信息系统源码,采用JAVA编程,支持跨平台部署应用,满足一级综合医院(专科二级及以下医院500床)的日常业务应用

医院HIS系统源码,HIS系统全套源码,支持电子病历4级,自主版权 his医院信息系统内设门诊/住院医生工作站、门诊/住院护士工作站。各工作站主要功能依据职能要求进行研发。如医生工作站主要功能为编辑电子病历、打印、处理医嘱;护士工…

总结|哪些平台有大模型知识库的Web API服务

截止2023/12/6 笔者个人的调研,有三家有大模型知识库的web api服务: 平台类型文档数量文档上传并解析的结构api情况返回页码文心一言插件版多文档有问答api,文档上传是通过网页进行上传有,而且是具体的chunk id,需要设…

“消费增值:改变你的购物方式,让每一笔消费都变得更有价值“

你是否厌倦了仅仅购买物品或享受服务后便一无所有的消费方式?现在,消费增值的概念将彻底改变你的消费观念!通过参与消费增值,你的每一笔消费都将变得更有价值! 消费增值是一种全新的消费理念,它让你在购物的…

星闪的三层架构

在数字化转型的浪潮中,物联网技术正成为连接世界的纽带,将各种智能设备融为一个无缝的整体。而在这个大背景下,星闪崭露头角,将成为连接未来的关键枢纽。本文将介绍星闪系统的三层架构,包括基础应用层、基础服务层和星…

面向AI开发的六种最重要的编程语言

在AI开发界,你使用的编程语言很重要。每种语言有其独特的特性。选择合适的语言不是关乎个人偏好的问题,而是影响你如何构建和启动AI系统的关键决定。无论你在AI方面有无经验,选择一种合适的语言来学习至关重要。合适的语言将帮助你创建功能强…

一文带你快速了解Python史上最快Web框架

文章目录 1. 写在前面2. Sanic框架简介2.1 背景2.2 特征与优势 3. Sanic框架实战3.1. 安装Sanic3.2. Demo案例编写 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&a…

NVRAM相关

1. Modem NVRAM四个分区 nvdata:手机运行过程中,使用(读写)的NVRAM(除了存在protect_f和protect_s中的NVRAM)都是该分区的nvram文件。存储着普通NVRAM数据、 IMEI、barcode、Calibration数据等。对应的modem path是Z:\NVRAM。NVRAM目录下有CALIBRAT、NVD…

Goby 漏洞发布| Apache OFBiz webtools/control/xmlrpc 远程代码执行漏洞(CVE-2023-49070)

漏洞名称: Apache OFBiz webtools/control/xmlrpc 远程代码执行漏洞(CVE-2023-49070) English Name:Apache OFBiz webtools/control/xmlrpc Remote Code Execution Vulnerability (CVE-2023-49070) CVSS core: 9.8 影响资产数&…

2023新优化应用:RIME-CNN-LSTM-Attention超前24步多变量回归预测算法

程序平台:适用于MATLAB 2023版及以上版本。 霜冰优化算法是2023年发表于SCI、中科院二区Top期刊《Neurocomputing》上的新优化算法,现如今还未有RIME优化算法应用文献哦。RIME主要对霜冰的形成过程进行模拟,将其巧妙地应用于算法搜索领域。 …

外网的maven项目转移到内网操作的步骤

1、新起一个仓库路径testRep,idea 引用的maven里的setting.xml里仓库配置修改成刚才建的路径,目的把需要的jar全部下载到那个文件夹里 2、项目打压缩包,刚才仓库文件夹打压缩包,并复制到内网电脑 3、内网电脑idea引入项目 4、修改…

【离散数学】——期末刷题题库(等价关系与划分)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

Spring Boot HTTP 400 错误的日志信息在哪里查看 ?

HTTP 400 一般来说是入参的某些字段的格式不对 Spring Boot项目启动后默认是不会把相应的日志打印在控制台的 需要在logback.xml里面做相关的配置才会打印出来 具体配置如下 <configuration><appender name"stdout" class"ch.qos.logback.core.Con…

C# OpenVINO 模型信息查看工具

目录 效果 支持模型 项目 代码 下载 C# OpenVINO 模型信息查看工具 效果 支持模型 ONNX format (*.onnx) PDPD (*.pdmodel) TF (*.pb) TFLite (*.tflite) 项目 代码 using Sdcb.OpenVINO; using System; using System.Collections.Generic; using System.Text; using…

数据结构与算法(五)回溯算法(Java)

目录 一、简介1.1 定义1.2 特性1.3 结点知识补充1.4 剪枝函数1.5 使用场景1.6 解空间1.7 实现模板 二、经典示例2.1 0-1 背包问题2.2 N皇后问题 一、简介 1.1 定义 回溯法&#xff08;back tracking&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条…

Linux环境下的MySQL安装

文章目录 前提说明1.卸载内置环境2.检查系统安装包3.卸载这些默认安装包4.获取MySQL官方yum源5.安装MySQLyum源&#xff0c;对比前后yum源6.查看yum源是否生效7.安装MySQL服务8.查看相对应的配置文件9.启动服务10.查看启动服务11.登录方法一12.登录方法二13.登录方法三14.设置开…

两种做法——判断是否是二叉搜索树

https://leetcode.cn/problems/validate-binary-search-tree/description/?envTypestudy-plan-v2&envIdtop-interview-150 方法一&#xff1a;中序遍历 考虑只有两个节点和一个结点的情况&#xff0c;可以头尾各加一个最大最小值&#xff0c;不用特判了&#xff0c;也可…

谷达冠楠:现在做抖音电商到底怎么样

随着互联网的发展&#xff0c;电商行业也在不断地壮大。而近年来&#xff0c;抖音作为一款短视频社交平台&#xff0c;也逐渐成为了电商的新兴渠道。那么&#xff0c;现在做抖音电商到底怎么样呢? 首先&#xff0c;抖音拥有庞大的用户群体。根据数据显示&#xff0c;抖音的日活…

C++中单引号‘‘和双引号““的区别

操作系统&#xff1a;Windows 10 IDE&#xff1a;CLion 单引号&#xff1a;表示一个字符&#xff0c;例如 a 双引号""&#xff1a;表示一个字符串&#xff0c;例如 "a" 在C中&#xff0c;使用双引号可以方便地创建字符串&#xff0c;而使用单引号可以方便…

Python语言基础知识(一)

文章目录 1、Python内置对象介绍2、标识符与变量3、数据类型—数字4、数据类型—字符串与字节串5、数据类型—列表、元组、字典、集合6、运算符和表达式7、运算符和表达式—算术运算符8、运算符和表达式—关系运算符9.1、运算符和表达式— 成员测试运算符in9.2、运算符和表达式…