opencv图像基本操作解析与实操

图片操作

cv2.namedWindow() 创建命名窗口

cv2.imshow()显示窗口

cv2.destroyAllwindws()摧毁窗口

cv2.resizeWindow()改变窗口大小

cv2.waitKey()等待用户输入

cv2.imread()读取图像

img.shape 图片h、w、c(高、宽、通道数

import cv2    # opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np# cv2.IMREAD_COLOR 彩色图像
# cv2.IMREAD_GRAYSCALE 灰度图像
img = cv2.imread('img1.jpg',cv2.IMREAD_COLOR)# 图像显示
cv2.imshow('img1',img)
# 等待时间,毫秒级,0表示任意键中止
cv2.waitKey(0)
cv2.destroyAllWindows()

 

视频操作

cv2.VideoCapture() 可以捕获摄像头,用数字来控制不同的设备,例如0,1

如果是视频文件,直接指定好路径即可。

vc = cv2.VideoCapture('video1.mp4')
# 检查是否打开正确
if vc.isOpened():open,frame = vc.read() # 每次读取1帧,再read再读取下一帧# 返回的第一个值是bool类型,第二个值是当前这一帧的图像(三维数组)
else:open = False
# 通常情况下
while open:ret,frame = vc.read()if frame is None:breakif ret == True:gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # cv2.cvtColor(图像,转换方法)cv2.imshow('result',gray)if cv2.waitKey(10) & 0xFF == 27: # 27是esc键break
vc.release()
cv2.destroyAllWindows()

ROI

Region Of Interest 直译为:感兴趣的区域

作用为:截取部分图像数据

# ROI
img = cv2.imread('img1.jpg')
if img is not None:img_partA = img[0:200,0:200] # ROI操作,img[h,w]# 本质是操作数组cv2.imshow('img1',img_partA)cv2.imshow('img2',img)cv2.waitKey(0)cv2.destroyAllWindows()

颜色通道提取

b,g,r = cv2.split(img) # 提取bgr
img = cv2.merge(b,g,r) # 通过bgr组合出一张图像

只保留R通道显示

img = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
b,g,r = cv2.split(img)
# 只保留R   [h,w,c] c表示通道,根据bgr索引,b为0,g为1,r为2
cur_img = img.copy()
cur_img[:,:,0] = 0  # b通道清零
cur_img[:,:,1] = 0  # g通道清零
cv2.imshow("cur_img",cur_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

只保留G通道显示

img = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
b,g,r = cv2.split(img)
# 只保留R   [h,w,c] c表示通道,根据bgr索引,b为0,g为1,r为2
cur_img = img.copy()
cur_img[:,:,0] = 0  # b通道清零
cur_img[:,:,2] = 0  # r通道清零
cv2.imshow("cur_img",cur_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

只保留B通道显示

img = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
b,g,r = cv2.split(img)
# 只保留R   [h,w,c] c表示通道,根据bgr索引,b为0,g为1,r为2
cur_img = img.copy()
cur_img[:,:,1] = 0  # g通道清零
cur_img[:,:,2] = 0  # r通道清零
cv2.imshow("cur_img",cur_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

边界填充

img = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
top_size,bottom_size,left_size,right_size = (50,50,50,50)# cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType) borderType为边界填充类型
replicate = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT101)
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_CONSTANT,value=0)

数值计算

# 部分数值计算(如图像融合)前提需要两图像shape值相同
img1 = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
img2 = cv2.imread("img2.jpg",cv2.IMREAD_COLOR)
img3 = img1 + 10    # 相当于3个通道中每一个像素数值都加10
img4 = img1 + img2  # 两张图像中每个像素的rgb三通道数值相加,# 以rgb888为例,如果一个像素的r相加后>255,则该数值等于相加后%255
img5 = cv2.add(img1,img2) # 两张图rgb相加,如果>255,则取最大值255

图像融合

# 图像融合前提需要两图像shape值相同
img1 = cv2.imread("img1.jpg",cv2.IMREAD_COLOR)
img2 = cv2.imread("img2.jpg",cv2.IMREAD_COLOR)# cv2.addWeighted(img1,img1权重,img2,img2权重,偏置项(整体提亮多少))
h2 = img2.shape[0]
w2 = img2.shape[1]
img1_new = cv2.resize(img1,(w2,h2))
res = cv2.addWeighted(img1_new,0.4,img2,0.6,0)
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

相关文章

kafka--基础知识点--6.1--LEO、HW、LW

在 Apache Kafka 中,LEO(Log End Offset)、HW(High Watermark)、和 LW(Low Watermark) 是副本机制和日志管理中的核心概念,共同确保数据一致性、可见性和存储效率。以下是它们的详细…

在线深凹槽深检测方法都有哪些 —— 激光频率梳 3D 轮廓检测

引言在制造业中,深凹槽深度的精确检测是保证零部件质量的关键环节。随着智能制造的推进,在线检测需求日益迫切,传统检测方法在效率和精度上的不足逐渐显现。本文将梳理在线深凹槽深的传统检测方法,并重点探讨激光频率梳 3D 轮廓检…

NumPy 数组拼接的高级技巧与实践

在数据处理和机器学习领域,NumPy 是 Python 中最核心的科学计算库之一。NumPy 数组(ndarray)的拼接操作是数据预处理中极为常见的需求。本文将深入探讨如何将不同形状的 NumPy 数组进行拼接,特别是如何将多个一维数组与二维数组进…

原创-基于 PHP 和 MySQL 的证书管理系统 第三版

第一版属于开源版本,所以后台功能没有开发许多出来,今天分享证书查询第三版; 通过几天的紧急写代码及测试;第三版基本可以上线上,不过后面有一些BUG只能一边修复。 演示地址:物星科云证书管理系统 第三版…

爬虫虚拟环境

conda create --name myrepenv python3.12创建一个名为 myrepenv、Python 版本为 3.12 的全新 Conda 虚拟环境,适合需要隔离依赖或测试不同 Python 版本的项目。我的方式创建(需要指定盘符)conda create --prefixD:\Anaconda3\envs\myrepenv python3.12展示所下的co…

Netty集群方案详解与实战(Zookeeper + Redis + RabbitMQ)

一、背景 二、Netty 单体架构的优缺点 优点 缺点 三、Netty 集群架构的优缺点 优点 缺点 四、适用场景对比 五、Netty单体架构代码实现 六、Netty集群架构方案实现 方案一、Nginx负载均衡实现集群(较为简单) Nginx配置 前端连接方式 方案二、NacosGateway(结合…

Oracle迁移到高斯,查询字段默认小写,解决办法

一、问题说明 Oracle中,查询结果字段默认大写。高斯中,查询结果字段默认小写。在Mybatis的xml中,如果查询语句使用Map接收查询结果,使用resultType"java.util.HashMap"或resultType"Map"等写法,返…

Android Jetpack Compose + MVVM 开发流程深度分析

核心组件关系图 [View] -- 观察 --> [ViewModel] -- 操作 --> [Repository]| | Compose UI StateFlow/LiveData| | 用户交互事件 Room/Retrofit| …

Tailwind CSS快速上手 Tailwind CSS的安装、配置、使用

📚前言 在Web前端开发的历史长河中,CSS的编写方式经历了多次演进,从早期的原生CSS 到 CSS预处理(Less/Sass/Stylus) 到 CSS-in-JS(Styled-Components/Emotion) 再到 Utility-First 原子化CSS。每一种演进方案其本质都是围绕“开发效率”、“…

单例模式的智慧:从UVM看控制的艺术

有时候,生活中的很多东西其实只需要一个就够了,就像一个公司只需要一个CEO,一个王朝只需要一个皇帝。在UVM验证环境中,也有很多这样的需求——有些对象,我们希望它在整个仿真过程中只存在一个实例。这就是我们今天要聊…

Hexo - 免费搭建个人博客01 - 安装软件工具

导言我的博客:https://q164129345.github.io/ Hexo 作为一个 Node.js 框架,它依赖于 Node.js 运行时环境来执行。 一、安装Node.js官方网址:https://nodejs.org/zh-cn追求系统稳定性、可靠性以及希望减少维护频率的用户来说,LTS版…

【Kubernetes】集群启动nginx,观察端口映射,work节点使用kubectl配置

参考b站叩丁狼总结:完整版Kubernetes(K8S)全套入门微服务实战项目,带你一站式深入掌握K8S核心能力 在master节点执行 kubectl create deployment nginx --imagenginxkubectl expose deployment nginx --port80 --typeNodePort1. …

20250704-基于强化学习在云计算环境中的虚拟机资源调度研究

基于强化学习在云计算环境中的虚拟机资源调度研究 随着云计算规模的持续扩大,数据中心虚拟机资源调度面临动态负载、异构资源适配及多目标优化等挑战。传统启发式算法在复杂场景下易陷入局部最优,而深度强化学习(DRL)凭借序贯决策…

day 33打卡

day 21 常见的降维算法 # 先运行之前预处理好的代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings(ignore)# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] plt.rcParam…

sec(x)积分推导

在MATLAB中绘制 sec⁡(x)、cos(x) 和 ln⁡∣sec⁡(x)tan⁡(x)∣的函数图像,需要特别注意 sec⁡(x) 在 cos⁡(x)0(即 xπ/2kπ)处的奇点。(deepseek生成代码)% 定义x范围(-2π到2π),…

gpt面试题

vue面试题 💡 一、响应式系统相关 ❓1. Vue 3 的响应式系统是如何实现的?和 Vue 2 有何本质区别? 答案: Vue 3 使用 Proxy 实现响应式(位于 vue/reactivity 模块),替代 Vue 2 的 Object.defineP…

【基于OpenCV的图像处理】图像预处理之图像色彩空间转换以及图像灰度化处理

目录 零、写在前面的话 一、图像色彩空间转换 1.1 RGB颜色空间 1.1.1 RGB颜色空间概念 1.1.2 RGB颜色模型​编辑 1.1.3 关于颜色加法 1.1.4 颜色加权加法 1.2 HSV颜色空间 1.2.1 HSV颜色空间概念 1.2.2 HSV颜色模型 1.2.3 应用意义 1.3 颜色转换 1.3.1 转换方法 …

Java TCP 通信详解:从基础到实战,彻底掌握面向连接的网络编程

作为一名 Java 开发工程师,你一定在实际开发中遇到过需要建立稳定连接、可靠传输、有序通信等场景。这时,TCP(Transmission Control Protocol) 通信就成为你必须掌握的重要技能之一。TCP 是一种面向连接、可靠、基于字节流的传输协…

HTML5 网页游戏设计开发——1、HTML基础

前言 互联网上的应用程序被称为Web程序,Web引用用程序是用Web文档(网页)累表现用户界面,而Web文档都遵守HTML格式。HTML5是最新的HTML标准。之前的版本HTML4.01于1999年发布,小20年过去了,互联网已经发声了…

opencv圖片標注

功能使用python opencv, 將文字信息標注在圖片中同一張圖片中涉及多次標注文字大小為標注框的0.3倍使用多綫程運行import cv2 import threading import numpy as npdef draw_annotations(item, annotations):"""在图片上绘制标注框和文本annotations: 标注列表…