OpenCV4.8 开发实战系列专栏之 02-图像色彩空间转换

news2024/9/27 19:32:22

大家好,欢迎大家学习OpenCV4.8 开发实战专栏,长期更新,不断分享源码。

专栏代码全部基于C++ 与Python双语演示,专栏答疑群 请联系微信 OpenCVXueTang_Asst

本文关键知识点:

  1. 色彩空间转换函数- cvtColor
    COLOR_BGR2GRAY = 6 彩色到灰度
    COLOR_GRAY2BGR = 8 灰度到彩色
    COLOR_BGR2HSV = 40 BGR到HSV
    COLOR_HSV2BGR = 54 HSV到 BGR

  2. 图像保存 - imwrite
    第一个参数是图像保存路径
    第二个参数是图像内存对象

OpenCV4中 cvtColor 和 imwrite 是两个常用的函数,但它们的功能和用途是不同的。

cvtColor

cvtColor 函数用于在图像的不同颜色空间之间进行转换。颜色空间是描述颜色的数学模型,常见的颜色空间包括RGB(红绿蓝)、HSV(色调、饱和度、亮度)、灰度等。cvtColor 函数允许你将图像从一个颜色空间转换到另一个颜色空间,这在图像处理中非常有用,比如在进行颜色过滤、边缘检测等操作时。

函数原型通常如下(以Python为例):

dst = cv2.cvtColor(src, code[, dstCn[, dst]])
  • src:输入图像,即要进行颜色空间转换的图像。
  • code:转换代码,指定了转换的类型,比如从BGR转换到灰度图(cv2.COLOR_BGR2GRAY),从BGR转换到HSV(cv2.COLOR_BGR2HSV)等。
  • dstCn(可选):目标图像的通道数;如果参数是0,则通道数自动从srccode中推导出来。
  • dst(可选):输出图像,与src具有相同的大小和深度。

imwrite

imwrite 函数用于将图像保存到文件系统中。这个函数接受一个文件名和一个图像数组作为输入,并将图像数组保存到指定的文件中。这个函数非常适合于将处理后的图像保存到硬盘上,以便后续使用或展示。

函数原型通常如下(以Python为例):

ret = cv2.imwrite(filename, img[, params])
  • filename:要写入的文件名,包括文件扩展名(如.jpg.png等),决定了图像的保存格式。
  • img:要保存的图像。
  • params(可选):对于JPEG,它可以是表示图像质量的整数(范围从0到100);对于PNG,它可以是压缩级别(范围从0到9)。

示例

假设你有一个BGR格式的图像,并希望将其转换为灰度图,然后保存为PNG文件:

import cv2

# 读取图像
img = cv2.imread('input.jpg')

# 将BGR图像转换为灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 保存灰度图
cv2.imwrite('output.png', gray_img)

在这个例子中,cvtColor 函数用于将图像从BGR颜色空间转换为灰度颜色空间,而imwrite 函数则用于将转换后的灰度图像保存到文件系统中。

演示代码

#include <opencv2/opencv.hpp>
#include

using namespace cv;
using namespace std;

int main(int artc, char** argv) {
Mat src = imread(“D:/vcprojects/images/test.png”);
if (src.empty()) {
printf(“could not load image…\n”);
return -1;
}
namedWindow(“input”, WINDOW_AUTOSIZE);
imshow(“input”, src);

Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
imwrite("D:/gray.png", gray);

waitKey(0);
return 0;

}

python 代码演示

import cv2 as cv

src = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
cv.imshow("gray", gray)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

结束语

学习贵在坚持,学习OpenCV贵在每一天的代码练习,原理跟基本的函数解释,相关知识,后续更新边学边理解,搞技术永远要坚持做长期主义者!我们一起努力!!!

专栏答疑群 请联系微信 OpenCVXueTang_Asst

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

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

相关文章

这些主流的财务管理软件,你用过哪款?

在当今的商业环境中&#xff0c;财务管理面临着诸多棘手的痛点问题&#xff1a; 数据的准确性与及时性难以保证&#xff0c;手工录入易出错且数据更新常不及时&#xff1b; 预算管理困难重重&#xff0c;编制不合理且执行监控难&#xff1b; 财务风险管控不足&#xff0c;应…

GS-SLAM论文阅读笔记--MM3DGS SLAM

前言 多传感器融合GS-SLAM的另一个IROS2024,不过这篇没有用到激光雷达&#xff0c;而是相机和IMU结合而实现的。今天看一下这篇。 文章目录 前言1.背景介绍2.关键内容2.1 跟踪2.2 深度监督2.3 惯性融合2.4建图2.5 总体流程 3.文章贡献4.个人思考 1.背景介绍 虽然SLAM方法使用…

基于keras 的神经网络股价预测模型

这些年从网上的各位大牛那学到很多&#xff0c;本着开源开放的精神&#xff0c;今天我决定开源我量化交易代码。输入股票代码&#xff0c;和训练的数据时间&#xff0c;自动预测股票未来的走势。。。。。。。。。。。。。。。。。。 #!/usr/bin/env python3 # -*- coding: utf…

物联网系统中隔离式交流转直流AC/DC电源模块方案

01 物联网系统中为什么要使用隔离式AC/DC电源模块 物联网系统中使用隔离式AC/DC电源模块的原因主要基于其在电力转换、系统安全、电磁兼容性以及设备保护等方面的优势。以下是详细分析&#xff1a; 电力转换的高效性 高效转换&#xff1a;隔离式AC/DC电源模块能够将交流电&am…

【中级通信工程师】终端与业务(八):市场营销战略

【零基础3天通关中级通信工程师】 终端与业务(八)&#xff1a;市场营销战略 本文是中级通信工程师考试《终端与业务》科目第八章《市场营销战略》的复习资料和真题汇总。本章的核心内容涵盖了市场营销战略、企业战略的层次与特点、服务的特征、体验式营销的类型等内容。通过本…

专业网站建设必备

专业网站建设不仅仅是简单的页面搭建&#xff0c;更是一项综合性的工程&#xff0c;需要结合行业特性、用户体验和技术创新&#xff0c;打造一个符合企业需求、独具特色的线上空间。 第一印象至关重要 一个企业网站就如同公司的数字名片&#xff0c;第一印象往往决定了用户是否…

C#的属性(Property)应用说明(二)

Property的应用说明补充&#xff1a; 一.自定义逻辑&#xff1a; 可以在 get 和 set 访问器中包含自定义的逻辑。 public class Person {private string name;public string Name{get { return name; }set{if (string.IsNullOrWhiteSpace(value))throw new ArgumentException…

Kubernetes从零到精通(15-安全)

目录 一、Kubernetes API访问控制 1.传输安全(Transport Security) 2.认证(Authentication) 2.1 认证方式 2.2 ServiceAccount和普通用户的区别 2.3 ServiceAccount管理方式 自动ServiceAccount示例 手动ServiceAccount示例 3.鉴权 (Authorization) 3.1鉴权方式 3.2 …

一次阿里云ECS免费试用实践

必坑指南 域名注册了&#xff0c;但是试用版无法完成ICP认证的流程 外网不能访问&#xff0c;推荐使用香港地区–自己就是坑在了杭州 阿里云的网站界面有点太复杂了&#xff0c;经常找不到自己想要的界面 为什么使用ECS ECS 一个在云端的弹性计算服务器。 可以支持对外公网映…

C++进阶:set和map

✨✨所属专栏&#xff1a;C✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 序列式容器和关联式容器 前⾯我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的…

五子棋双人对战项目(1)——WebSocket介绍

目录 一、项目介绍 如何实现实时同步对局&#xff1f; 二、WebSocket 1、什么是WebSocket&#xff1f; 2、WebSocket的报文格式 opcode payload len payload data 3、WebSocket握手过程 4、WebSocket代码的简单编写 三、WebSocket 和 HTTP的关系 1、相同点&#xf…

如何把pdf拆分成一页一页?推荐4个简单方便的拆分方法(内含详细教程)

如何把pdf拆分成一页一页&#xff1f;对于现在的职场来说&#xff0c;想要编辑pdf格式文件还是蛮简单的。PDF文档早就成为了我们日常办公中信息传递与存储的核心载体&#xff0c;因此对于编辑pdf的需求是越来越多了。 关于如何编辑pdf文件&#xff0c;市面上提供了很多方法和软…

七大机器学习常用库一次讲清楚(TensorFlow|Scikit-Learn|NumPy|Keras|PyTorch|LightGBM||NLTK)

机器学习的研究和学习必须使用Python开发库&#xff0c;面对很多个机器学习的Python库或者框架&#xff0c;我们是不是傻傻的分不清&#xff0c;这个那个到底是做什么&#xff0c;什么时候用这个&#xff0c;什么时候用那个&#xff0c;他们各自的优势劣势都有哪些&#xff0c;…

smb文件夹共享设置

UOS统信三种不同场景的文件夹共享,分别是:1、UOS系统间的文件共享;2、Windows7系统访问UOS共享的文件;3、UOS系统访问Windows7共享的文件 文章目录 第二种场景:Windows7系统访问UOS共享的文件步骤一:设置共享密码步骤二:输入共享IP地址步骤三:输入网络密码步骤四:共享…

RabbitMQ高级特性-发送方确认

对于发送方发送消息到RabbitMQ的可靠性机制 引入&#xff1a;在持久化的消息正确存⼊RabbitMQ之后,还需要有⼀段时间(虽然很短,但是不可忽视)才能存⼊磁盘中.RabbitMQ并不会为每条消息都进⾏同步存盘(调⽤内核的fsync⽅法)的处理, 可能仅仅保存到操作系统缓存之中⽽不是物理磁…

Vue3 + element-plus el-table二次封装组件新增虚拟滚动功能

1、此功能已集成到TTable组件 和TSelectTable 2、最终效果&#xff08;基于element-plus 的 el-table组件&#xff09; 3、TTable或TSelectTable组件使用&#xff08;只需要在标签中设置useVirtual即可&#xff09; 4、源码&#xff08;可以提取当做hooks方式来使用–具体看组…

工作笔记【四】

对于这种&#xff0c;样式一样&#xff0c;但是图片和字体颜色不一样&#xff0c;动态渲染。 代码&#xff1a; <template><view class"page"><view class"rows" v-for"item in data"><view class"v0"><v…

云桌面+数字人:开启直播新纪元

随着科技的飞速发展&#xff0c;直播行业也在不断变革。云桌面和数字人直播作为新兴力量&#xff0c;正逐渐崭露头角&#xff0c;受到了广泛关注。 云桌面技术的出现&#xff0c;为直播带来了全新的可能性。它不再依赖传统的本地硬件设备&#xff0c;而是通过云计算提供弹性可…

Abaqus:一款强大的非线性分析软件

Abaqus是一款由达索系统公司开发的工程仿真软件&#xff0c;它提供了广泛的解决方案来解决各种复杂的工程问题。从2016版本到2018版本&#xff0c;Abaqus安装包中包含了多种辅助工具&#xff0c;如Fe-safe疲劳分析软件、Tosca结构优化软件以及Isight多学科优化平台等&#xff0…

长效静态IP代理详解:稳定网络访问的保障

在这个信息爆炸的时代&#xff0c;网络安全和隐私保护变得尤为重要。无论是个人用户还是企业&#xff0c;都希望在网络上能够畅行无阻而不被追踪。而长效静态IP代理&#xff0c;正是这个隐形守护者&#xff0c;让你在网络世界中如鱼得水。本文将深入探讨长效静态IP代理的各个方…