Python学习笔记第八十天(OpenCV图像操作)

Python学习笔记第八十天

  • OpenCV图像操作
    • 图像读取与显示
    • 像素值访问与修改
    • 图像属性获取
    • ROI定义与处理
    • 通道拆分与合并
    • 图像边框设置
  • 后记

OpenCV图像操作

图像读取与显示

在开始任何图像处理之前,我们需要先读取图像。OpenCV提供了cv2.imread函数用于读取图像。这个函数接受两个参数:图像的路径和读取模式(例如,是否以彩色或灰度模式读取)。

import cv2
img = cv2.imread('image.jpg')

读取图像后,我们可以使用cv2.imshow函数在窗口中显示图像。cv2.imshow需要两个参数:窗口名称和要显示的图像。此外,cv2.waitKey函数用于等待用户按键,而cv2.destroyAllWindows则用于关闭所有打开的窗口。

cv2.imshow('Image Window', img)
cv2.waitKey(0)  # 等待用户按键,0表示无限等待
cv2.destroyAllWindows()  # 关闭所有窗口

像素值访问与修改

在OpenCV中,你可以像访问数组一样访问图像的像素值。对于彩色图像,像素值是一个包含三个通道(BGR)值的元组。你可以使用索引来访问特定位置的像素值。

pixel_value = img[100, 100]  # 访问坐标(100, 100)的像素值

要修改像素值,只需将新的值赋给相应的位置:

img[100, 100] = [255, 0, 0]  # 将坐标(100, 100)的像素设置为红色(BGR)

如果你想按通道访问像素值,可以使用cv2.at<channel>函数。例如,要访问像素(x, y)的B通道值,可以使用:

b_value = cv2.at<uchar>(y, x)[0]  # 注意通道顺序为BGR,所以索引为[0]表示B通道。

图像属性获取

使用shape属性可以获取图像的维度和通道数。shape属性返回一个包含三个元素的元组,分别表示图像的高度、宽度和通道数。

height, width, channels = img.shape[:3]  # 获取图像的高度、宽度和通道数

ROI定义与处理

ROI(感兴趣区域)是图像处理中的一个重要概念,它允许你处理图像的一部分而不是整个图像。你可以使用cv2.rectangle函数在图像上绘制矩形ROI。这个函数接受四个参数:图像、矩形左上角的坐标、矩形的宽度和高度,以及可选的线条颜色和线条宽度。如果你希望绘制一个填充的矩形,可以将线条宽度设置为-1。

对于ROI的处理,例如对ROI内的像素应用某些操作,可以使用NumPy的切片语法。例如,要获取矩形ROI内的像素值,可以使用以下代码:

roi = img[50:50+100, 50:50+100]  # 获取ROI的像素值

通道拆分与合并

OpenCV中的彩色图像是按BGR顺序存储的。这意味着像素值包含蓝色、绿色和红色通道的值。如果你想单独处理这些通道,可以使用cv2.split函数拆分通道。这个函数将返回一个通道列表。例如:

channels = cv2.split(img)  # 将BGR通道拆分到三个通道中。

有时,你可能需要将通道合并为单通道或多通道图像。你可以使用cv2.merge函数合并通道。这个函数接受一个通道列表作为参数,并返回合并后的图像。例如:

img_merged = cv2.merge([r, g, b])  # 合并通道,注意通道顺序应为BGR,所以需要将r, g, b的顺序改为r, g, b。

图像边框设置

除了之前提到的在图像上绘制矩形边框外,还可以使用cv2.copyMakeBorder函数添加边框。这个函数接受六个参数:输入图像、输出图像、边框宽度、边框类型、可选的填充值和可选的边界值。边框类型可以是几种不同的选项之一,包括常量、平铺重复和镜像反射等。例如:

# 为图像添加5个像素的边框,边框颜色为白色,类型为矩形。
img_with_border = cv2.copyMakeBorder(img, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=[255, 255, 255])

后记

今天学习的是Python OpenCV图像操作学会了吗。 今天学习内容总结一下:

  1. 图像读取与显示
  2. 像素值访问与修改
  3. 图像属性获取
  4. ROI定义与处理
  5. 通道拆分与合并
  6. 图像边框设置

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

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

相关文章

【Xilinx FPGA】异步 FIFO 的复位

FIFO&#xff08;First-In-First_Out&#xff0c;先入先出&#xff09;是一种的存储器类型&#xff0c;在 FPGA 开发中通常用于数据缓存、位宽转换或者跨时钟域&#xff08;多 bit 数据流&#xff09;。在使用异步 FIFO 时&#xff0c;应注意复位信号是否遵循相关要求和规范&am…

MySQL Mysqldump 一致性备份与大数据库备份 与 PG MYSQL 到底谁是NO.1

这开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共1830人左右 1 2 3 4 5&#xf…

android apk文件的签名问题

android的APK文件实际上是一个jar文件。jar的意思是瓶、罐&#xff0c;那就意味着jar文件是一个用来存放android应用相关文件的容器。事实上&#xff0c;它也确实如此&#xff0c;它只是一个带或不带压缩的zip文件&#xff0c;当你把.apk后缀改成.zip后&#xff0c;就能对此进行…

Web网页开发-总结笔记1

1. 主流浏览器都有哪些&#xff08;最少五个&#xff09;&#xff1f; 火狐浏览器、谷歌浏览器、IE浏览器、Edge浏览器、Opera浏览器、Safari浏览器2. 常见的浏览器内核都有哪些&#xff1f; IE &#xff1a;Trident 火狐&#xff1a;Gecko 苹果&#xff1a;Webkit 谷歌、欧朋、…

C/C++ 位段

目录 什么是位段&#xff1f; 位段的内存分配 位段的跨平台问题 什么是位段&#xff1f; 位段的声明与结构是类似的&#xff0c;但是有两个不同&#xff1a; 位段的成员必须是 int、unsigned int 或signed int 等整型家族。位段的成员名后边有一个冒号和一个数字 这是一个…

SSH远程连接

1 背景 在多处理器的分布式架构中&#xff0c;不同的ROS系统之间可能会频繁的涉及到文件的传输。   例如:我们在PC端编写ROS程序&#xff0c;而最终需要在Jetson nano上运行&#xff0c;如何将相关目录以及文件从PC上传到Jetson nano&#xff1f;这便需要使用SSH工具。 2 概…

im6ull学习总结(三-3)freetype

1、Freetype简介 FreeType是一个开源的字体渲染引擎&#xff0c;主要用于将字体文件转换为位图或矢量图形&#xff0c;并在屏幕上渲染出高质量的字体。它提供了一组API&#xff0c;使开发者能够在自己的应用程序中使用和呈现字体。 FreeType最初是作为一个独立项目开发的&…

[Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例

在群組中看到上述問題&#xff0c;研判應是一份隨月份變動的產品報價表單&#xff0c;空白欄可能表示該月份價格與上個月份一致。這個問題是需要取得最近一次單價和倒數第二次單價&#xff0c;常用且實務的excel案例值得紀錄。 最近一次單價: INDEX($B2:$G2,1,LARGE(IF(ISBLAN…

SpringSecurity集成JWT实现后端认证授权保姆级教程-环境搭建篇

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法 &#x1f492; 公众号&#xff1a;知识浅谈 &#x1f525;网站…

跨平台开发教学:构建同时支持iOS和Android的教育网校APP

当下&#xff0c;教育行业也逐渐迎来了数字化转型的时代。构建一款支持iOS和Android的教育网校APP&#xff0c;不仅可以提供更好的用户体验&#xff0c;还能扩大应用的覆盖面&#xff0c;满足不同用户群体的需求。 一、选择合适的跨平台开发框架 在开始构建教育网校APP之前&a…

MidTool图文创作-GPT-4与DALL·E 3的结合

GPT-4与DALLE 3的结合 GPT-4是由OpenAI开发的最新一代语言预测模型&#xff0c;它在前代模型的基础上进行了大幅度的改进&#xff0c;不仅在文本生成的连贯性、准确性上有了显著提升&#xff0c;还在理解复杂语境和执行多步骤指令方面表现出了更高的能力。而DALLE 3则是一个创…

构建异地企业网络互联的高效路径

在当今数字化浪潮中&#xff0c;企业的业务拓展已不再受限于地理位置。为了在全球竞争中立于不败之地&#xff0c;越来越多的企业选择在不同城市设立分支机构&#xff0c;构建异地网络&#xff0c;实现高效的协同办公。本文将深入探讨在北上广等经济发达地区&#xff0c;如何通…

重排和重绘的区别,什么情况下会触发这两种情况

重排&#xff08;reflow&#xff09;和重绘&#xff08;repaint&#xff09;是两种不同的操作&#xff0c;它们在网页渲染过程中发生。 重排是指当元素的布局和几何属性发生改变时&#xff0c;浏览器需要重新计算元素的几何属性&#xff0c;然后重新布局所有相关元素的过程。这…

Linux部署Yearning并结合内网穿透工具实现公网访问本地web管理界面

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具&#xff0c;为DBA与开发人员使用…

计算机毕业设计——SpringBoot 个人博客管理系统(附源码)

1&#xff0c;绪论 1.1 背景调研 在互联网飞速发展的今天&#xff0c;互联网已经成为人们快速获取、发布和传递信息的重要渠道&#xff0c;它在人们政治、经济、生活等各个方面发挥着重要的作用。互联网上发布信息主要是通过网站来实现的&#xff0c;获取信息也是要在互联网中…

BART论文解读:BERT和GPT结合起来会发生什么?

BART:Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension 主要工作 提出了BART (Bidirectional and Auto-Regressive Transformers)&#xff0c; 是一种用于自然语言生成、翻译和理解的序列到序列的预训练方法。它…

C语言编译器(C语言编程软件)完全攻略(第二十七部分:VS安全函数问题(C语言安全函数)是怎么回事?如何解决?)

介绍常用C语言编译器的安装、配置和使用。 二十七、VS安全函数问题&#xff08;C语言安全函数&#xff09;是怎么回事&#xff1f;如何解决&#xff1f; 在 VS&#xff08;Visual Studio&#xff09;下编译C语言程序&#xff0c;如果使用了 scanf()、gets()、strcpy()、strca…

【Windows】之微软输入法配置小鹤双拼

前言 Windows 自带的输入法微软输入法本身就是个最简洁、最方便的输入法&#xff0c;不需要去安装多余的第三方输入法软件。同时&#xff0c;微软中文拼音输入法支持双拼输入法&#xff0c;但微软自带的双拼输入法不包含小鹤双拼方案的。所以&#xff0c;在这里将会讲解如何配置…

oracle 补齐数字长度 to_char踩坑

oracle的to_char网上找到的说明如下 &#xff08;1&#xff09;用作日期转换&#xff1a; to_char(date,格式); select to_date(2005-01-01 ,yyyy-MM-dd) from dual; select to_char(sysdate,yyyy-MM-dd HH24:mi:ss) from dual; &#xff08;2&#xff09;处理数字&#xf…

深入理解Vue3中的自定义指令

Vue3是一个流行的前端框架&#xff0c;它引入了许多新特性和改进&#xff0c;其中之一是自定义指令。自定义指令是一种强大的功能&#xff0c;可以让开发者在模板中直接操作 DOM 元素。本文将深入探讨 Vue3中的自定义指令&#xff0c;包括自定义指令的基本用法、生命周期钩子函…