目标:1.学会图像的通道分割与合并

           2.学会图像的的常规操作

##一些概念:

二值图像:只包含黑色和白色两种颜色的图像,1为白色,0为黑色

灰度图像:计算机会将灰度处理为256个灰度级,用区间[0,255]来表示。其中255表达纯白 色,0表示纯黑色。

彩色图像:由于色彩空间不一致,导致彩色图像的表示也不一致,以RGB图像为例,由三个  通道组成,R通道,G通道,B通道,每个色彩的通道值处于[0,255],经过不同的组合共有 256*256*256=16777216种颜色。但是在opencv中,图像通道是按照 B,G,R排列的

1. 通道操作

为什么需要通道操作?

有时候,需要将图像的通道数进行分割处理,在opencv中,图像通道是按照 B,G,R排列的

方法:分为索引拆分和通过函数拆分,主要讲解函数拆分

函数cv2.spilt(img)

import cv2lean=cv2.imread("1.JPG")
b,g,r=cv2.split(lean)   # 与下面的写法是一致的# b1=cv2.split(lean)[0]
# g1=cv2.split(lean)[1]
# r1=cv2.split(lean)[2]cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意事项:上述代码呈现的图片大小不能调,下面的是可以手动调大小的

import cv2result=cv2.imread("1.JPG")
b,g,r=cv2.split(result)    #分割图像,将图像按照B,G,R的通道进行拆分
cv2.namedWindow('11',cv2.WINDOW_NORMAL)  # 需要自定义个窗体,正常模式
cv2.namedWindow('12',cv2.WINDOW_NORMAL)
cv2.namedWindow('13',cv2.WINDOW_NORMAL)
cv2.imshow("11",b)
cv2.imshow("12",g)
cv2.imshow("13",r)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. 通道合并

说明:通道合并是通道拆分的逆过程,例如将三个通道的灰度图像构成 一副彩色图像。

为什么需要通道合并?

有时候可能需要两个通道合并或者多个通道合并,图像在opencv中是按照B,G,R的顺序进行排列的,可以先对图像进行拆分操作,在按照R,G,B的顺序进行合并。

函数:cv2.merge(mv)

解释:参数mv为单通道图像或者列表,每个通道的图像长和款应该相同

import cv2result=cv2.imread("1.JPG")
b,g,r=cv2.split(result)    #分割图像,将图像按照B,G,R的通道进行拆分
cv2.namedWindow('11',cv2.WINDOW_NORMAL)  # 需要自定义个窗体,正常模式
cv2.namedWindow('12',cv2.WINDOW_NORMAL)
#cv2.namedWindow('13',cv2.WINDOW_NORMAL)bgr=cv2.merge([b,g,r])
rgb=cv2.merge([r,g,b])cv2.imshow("11",bgr)
cv2.imshow("12",rgb)
#cv2.imshow("13",r)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. 图像属性

下面仅介绍常用的图像属性

shape:如果是彩色图像,则返回行数、列数、通道数的数组,若是二值图像或者灰度图像                 则只返回行数和列数

size:返回图像的像素数,其值为 “行x列x通道数”,灰度图像或者二值图像通道数为1

dtype:返回图像的数据类型

### 图像的高和宽分别对应着列数和行数。

  • 高度(Height)=行数
  • 宽度(Width)=列数

如何获取图像的长和宽?

import cv2# 读取图像(返回的是 numpy 数组)
img = cv2.imread("image.jpg")# 获取图像的高度(行数)和宽度(列数)
height, width = img.shape[:2]  # 取前两个值,分别是高度和宽度print(f"图像宽度(列数):{width}")
print(f"图像高度(行数):{height}")

如何统一图像的大小?如何批量统一图像的嗯大小?

函数:cv2.resize(src, dsize, fx=0, fy=0, interpolation=cv2.INTER_LINEAR)

参数作用
src输入图像(numpy 数组)
dsize目标尺寸,格式为 (宽度, 高度)(如 (640, 480)
fx/fy水平 / 垂直方向的缩放比例(若指定,则 dsize 需设为 None
interpolation插值方法(决定缩放时如何计算新像素值,影响结果质
import cv2
import os
from glob import globdef resize_images(input_dir, output_dir, target_size=(640, 480)):"""批量调整图像大小:param input_dir: 原始图像所在文件夹:param output_dir: 调整后图像的保存文件夹:param target_size: 目标尺寸 (宽度, 高度)"""# 创建输出文件夹(如果不存在)os.makedirs(output_dir, exist_ok=True)# 获取文件夹中所有图片(支持常见格式)image_paths = glob(os.path.join(input_dir, "*.[jpgnJPGEpngPNG]"))for img_path in image_paths:# 读取图像img = cv2.imread(img_path)if img is None:print(f"无法读取图像: {img_path}")continue# 调整图像大小# interpolation参数:缩放时的插值方法# - cv2.INTER_AREA: 适合缩小图像(推荐)# - cv2.INTER_CUBIC: 适合放大图像(质量更高但速度慢)# - cv2.INTER_LINEAR: 线性插值(默认,平衡速度和质量)resized_img = cv2.resize(img, target_size, interpolation=cv2.INTER_AREA)# 保存调整后的图像img_name = os.path.basename(img_path)output_path = os.path.join(output_dir, img_name)cv2.imwrite(output_path, resized_img)print(f"已保存: {output_path}")# 使用示例
if __name__ == "__main__":input_folder = "原始图片文件夹路径"  # 替换为你的输入文件夹output_folder = "调整后图片文件夹路径"  # 替换为你的输出文件夹target_width = 800    # 目标宽度target_height = 600   # 目标高度resize_images(input_folder, output_folder, (target_width, target_height))


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

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

相关文章

Qt——常用Widget(控件)

常用控件 Widget 需要说明,此处说明的控件都继承于QWiget,因此之前所说的控件属性,和相关API,在这里的控件都适用 文章目录常用控件 Widget按钮类控件QPushButtonQRadioButtonQCheckBox显示类控件QLabel初识事件LCD NumberProgre…

Cursor/VSCode/VS2017 搭建Cocos2d-x环境,并进行正常的调试和运行(简单明了)

作者:求一个demo 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 内容通俗易懂,没有废话 废话不多说,我们直接开始------>>>>>> !&#xff…

从 LLM 到自主 Agent:OpenCSG 打造开源 AgenticOps 生态

从 LLM 到自主 Agent:OpenCSG 打造开源 AgenticOps 生态在产业拐点上,交付可持续、可落地的智能体未来在生成式 AI 的时代洪流中,大语言模型(LLM)已成为行业标配,但如何突破“会说不会做”的局限&#xff0…

黑马程序员mysql课程中在Linux系统中安装mysql出现问题

问题描述在安装linux的最后一步的指令的时候报错警告:mysql-community-server-8.0.26-1.el7.x86_64.rpm: 头V3 DSA/SHA256 Signature, 密钥 ID 5072e1f5: NOKEY 错误:依赖检测失败:net-tools 被 mysql-community-server-8.0.26-1.el7.x86_64 …

「iOS」————APP启动优化

iOS学习APP的启动流程启动流程缺页错误主要阶段pre-main阶段main阶段启动优化pre-mainmain阶段启动优化总结流程总结APP的启动流程 启动 首先我们来了解启动的概念: 广义上的启动是点击图标到首页数据加载完毕狭义上的启动是点击图标到启动图完全消失的第一帧 启…

知名车企门户漏洞或致攻击者远程解锁汽车并窃取数据

漏洞概况一家大型汽车制造商的在线系统存在安全漏洞,可能导致客户数据泄露,并允许攻击者远程访问车辆。该漏洞由安全研究员Eaton Zveare发现,他已于2025年2月向涉事车企报告并促使漏洞修复。Zveare虽未公开车企名称,但透露这是在美…

Elasticsearch JS 自定义 ConnectionPool / Connection / Serializer、敏感信息脱敏与 v8 平滑迁移

0. 什么时候该用“高阶配置”? 复杂网络/路由需求:自定义“健康节点”判定、权重路由、多租户隔离。替换 HTTP 栈:接入企业内网网关、打通自研代理/审计、细化超时/连接细节。序列化治理:为超大 JSON、Bulk、查询串做定制编码/压缩…

希尔排序专栏

在排序算法的大家庭中,希尔排序(Shell Sort)以其独特的 "分组插入" 思想占据着重要地位。它是对插入排序的创造性改进,通过引入 "增量分组" 策略,大幅提升了排序效率。本文将带你深入理解希尔排序…

Android 欧盟网络安全EN18031 要求对应的基本表格填写

Android 欧盟网络安全EN18031 要求对应的基本表格填写 文章目录Android 欧盟网络安全EN18031 要求对应的基本表格填写一、背景二、18031认证预填表格三、其他1、Android EN 18031 要求对应的基本表格小结2、EN 18031的要求表格内容填写3、一定要做三方认证?4、欧盟网…

《Attention-driven GUI Grounding》论文精读笔记

论文链接:[2412.10840] Attention-driven GUI Grounding: Leveraging Pretrained Multimodal Large Language Models without Fine-Tuning 摘要 近年来,多模态大型语言模型(Multimodal Large Language Models,MLLMs)的…

PIDGenRc函数中lpstrRpc的由来和InitializePidVariables函数的关系

第一部分:./base/ntsetup/syssetup/setupp.h:404:#define MAX_PID30_RPC 5BOOL InitializePidVariables() {//// Get the Pid from HKEY_LOCAL_MACHINE\SYSTEM\Setup\Pid//Error RegOpenKeyEx( HKEY_LOCAL_MACHINE,((MiniSetup || OobeSetup) ? szFinalPidKeyNa…

Nginx学习笔记(七)——Nginx负载均衡

⚖️ Nginx学习笔记(七)——Nginx负载均衡 📌 一、负载均衡核心概念 架构定位: #mermaid-svg-00aCvwmJ40DHNd66 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-00aC…

MQ积压如何处理

处理消息队列(MQ)积压是一个需要系统化分析的运维挑战。下面我将结合常见原因,分步骤说明处理方案,并区分应急措施和根本解决方案:​一、快速诊断积压原因(核心!)​​​监控告警分析…

Unity与OpenGL中的材质系统详解

引言 在现代3D图形开发中,材质是定义物体外观的核心元素。Unity引擎提供了强大且直观的材质系统,使得开发者能够轻松实现复杂的视觉效果。然而,对于熟悉OpenGL的开发者来说,理解Unity材质系统的工作原理以及如何在OpenGL中实现类…

k8s安装DragonflyDB取代redis

数据库类型线程模型吞吐量 (QPS)延迟 (μs)内存效率适用场景兼容性Memcached纯内存键值存储多线程100K - 500K10 - 100高缓存、会话存储无原生密码认证DragonflyDB多协议内存数据库多线程1M50 - 200中高高吞吐缓存、Redis 替代兼容 RedisKeyDBRedis 多线程分支多线程500K - 1M5…

Horse3D游戏引擎研发笔记(五):在QtOpenGL环境下,仿three.js的BufferGeometry管理VAO和EBO绘制四边形

一、背景介绍 在三维图形渲染中,几何形状的管理是引擎的核心功能之一。Three.js通过BufferGeometry接口实现了对顶点数据和索引数据的高效管理,而OpenGL则通过顶点数组对象(VAO)和元素数组对象(EBO)来实现…

Ping32 与 IP-GUARD 深度对比:Ping32,引领企业数据安全新方向

在数字化时代,企业数据宛如珍贵的宝藏,是推动业务发展、保持竞争优势的核心资产。但与此同时,数据安全威胁也如影随形,内部员工的误操作、恶意窃取,外部黑客的攻击,都可能让企业数据面临泄露风险&#xff0…

洛谷 P2842 纸币问题 1 -普及-

题目描述 某国有 nnn 种纸币,每种纸币面额为 aia_iai​ 并且有无限张,现在要凑出 www 的金额,试问最少用多少张纸币可以凑出来? 输入格式 第一行两个整数 n,wn,wn,w,分别表示纸币的种数和要凑出的金额。 第二行一行 nn…

第十四节:物理引擎集成:Cannon.js入门

第十四节:物理引擎集成:Cannon.js入门 引言 物理引擎为3D世界注入真实感,让物体遵循重力、碰撞和动量等物理规律。Cannon.js是Three.js生态中最强大的物理引擎之一,本文将深入解析其核心机制,并通过Vue3实现物理沙盒系…

二十四、Mybatis-基础操作-删除(预编译SQL)

mybatis环境准备概述与注意事项(springboot项目引入三项必要的起步依赖)项目目录结构mybatis基础操作-删除对应EmpMapper(接口)代码 package com.itheima.mapper;import org.apache.ibatis.annotations.*;Mapper public interface…