opencv_核心操作

图像基本操作

访问和修改像素值

import numpy as np
import cv2
img = cv2.imread('c:/Users/HP/Downloads/basketball.png')
h,w,c = img.shape
#图像大小
print(h,w,c)### 841 1494 3
# 通过行和列坐标访问像素值
img[100,100]### 231
### array([231, 140, 146], dtype=uint8)
# 通过行和列坐标访问像素值
img[100,100]### array([231, 140, 146], dtype=uint8)
# # 仅访问蓝色通道的像素
blue = img[100,100,0]
print(blue)### 231
# 修改颜色
img[100,100] = [255,255,255]
print(img[100,100])### [255 255 255]

Numpy 访问每个像素值并修改其值非常缓慢,

更好的访问和编辑像素的方法:

#访问 红色通道 的值
img.item(10,10,2)### 131
#修改 红色通道 的值
img.itemset((10,10,2),100)
img.item(10,10,2)### 100

访问图像属性

print(img.shape)
# 如果图像是灰度图像,则返回的元组仅包含行数和列数,因此它是检查加载的图像是灰度图还是彩色图的一种很好的方法### (841, 1494, 3)
print(img.size)  # 总像素数### 3769362
print(img.dtype)  # 图像数据类型### uint8

图像中的感兴趣区域

from matplotlib import pyplot as pltplt.imshow(img)

在这里插入图片描述

from matplotlib import pyplot as pltball = img[450:600,450:650]
plt.xticks([]), plt.yticks([]) # 隐藏 X 和 Y 轴的刻度值
plt.imshow(ball)

在这里插入图片描述

拆分和合并图像通道

b,g,r = cv2.split(img)  # 分割为单通道
img = cv2.merge((b,g,r))  # 合并b = img[:,:,0]  # 或者使用numpy.array的切片方法img[:,:,2] = 0  # 要将所有红色像素设置为零,则无需先拆分通道;Numpy 索引更快## warning:CV.spilt()是一项代价高昂的操作(就时间而言)。所以只在你需要时再这样做,否则使用 Numpy 索引。

制作图像边界(填充)

import cv2 as CV
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,0,0]
img1 = img
replicate = CV.copyMakeBorder(img1,10,10,10,10,CV.BORDER_REPLICATE)
reflect = CV.copyMakeBorder(img1,10,10,10,10,CV.BORDER_REFLECT)
reflect101 = CV.copyMakeBorder(img1,10,10,10,10,CV.BORDER_REFLECT_101)
wrap = CV.copyMakeBorder(img1,10,10,10,10,CV.BORDER_WRAP)
constant= CV.copyMakeBorder(img1,10,10,10,10,CV.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()

在这里插入图片描述

图像的算术运算

图像加法

# 可以通过 cv.add()或简单地通过 numpy 操作将两个图像相加,res = img1 + img2;
# 两个图像应该具有相同的深度和类型,或者第二个图像可以是像素值,比如(255,255,255),白色值。img1 = cv2.imread('c:/Users/HP/Downloads/basketball.png')
img2 = cv2.imread('c:/Users/HP/Downloads/jump.png')
res = img1 + img2plt.xticks([]), plt.yticks([]) # 隐藏 X 和 Y 轴的刻度值
plt.imshow(res)

在这里插入图片描述

图像混合

也是加法,但两幅图像的权重不同,就会给人一种混合或者透明的感觉。图像混合的计算公式如下:

g(x) = (1−α)f0(x) + αf1(x)

函数cv2.addWeighted()可以按下面的公式对图片进行混合操作:

dst = α⋅img1 + β⋅img2 + γ

dst = cv2.addWeighted(img1,0.7, img2,0.3, 0)plt.xticks([]), plt.yticks([]) # 隐藏 X 和 Y 轴的刻度值
plt.imshow(dst)

在这里插入图片描述

按位操作

这包括按位 AND,OR,NOT 和 XOR 运算。它们在提取图像的某一部分(我们将在后面的章节中看到)、定义和使用非矩形 ROI 等方面非常有用。示例:

假如我想加一个OpenCV的 logo在一个图像上,如果只是简单的将两张图像想加,则会改变叠加处的颜色;

如果进行上面所说的混叠操作,则会得到一个有透明效应的结果,但我希望得到一个不透明的logo;

如果logo是一个矩形logo,那可以用上节所讲的ROI来做;

但是OpenCV的logo是不规则形状的,所以用下面的bitwise操作来进行:

#加载两张图片
img1 = cv2.imread('c:/Users/HP/Downloads/basketball.png')
img2 = cv2.imread('c:/Users/HP/Downloads/opencv_logo.png')#我想在左上角放置一个logo,所以我创建了一个 ROI,并且这个ROI的宽和高为我想放置的logo的宽和高
rows,cols,channels = img2.shape
roi = img1 [0:rows,0:cols]#现在创建一个logo的掩码,通过对logo图像进行阈值,并对阈值结果并创建其反转掩码
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret,mask = cv2.threshold(img2gray,10,255,cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)#现在使 ROI 中的徽标区域变黑
img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)plt.xticks([]), plt.yticks([]) # 隐藏 X 和 Y 轴的刻度值
plt.imshow(img1_bg)#仅从徽标图像中获取徽标区域。
img2_fg = cv2.bitwise_and(img2,img2,mask = mask)#在 ROI 中放置徽标并修改主图像
dst2 = cv2.add(img1_bg,img2_fg)
res = img1
res [0:rows,0:cols] = dst2plt.xticks([]), plt.yticks([]) # 隐藏 X 和 Y 轴的刻度值
plt.imshow(res)

在这里插入图片描述

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

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

相关文章

额定值高于 1 kW 的电机驱动应用使用 GaN 逆变器 IC

GaN 技术的三个重要的参数是更高的带隙、临界场和电子迁移率。当这些参数结合起来时,由于 GaN 晶体的临界场高 10 倍,因此与硅 MOSFET 相比,电端子之间的距离可以近 10 倍。这导致了 GaN 和硅之间的明显区别:中压 GaN 器件可以基于…

AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(初步实践)

系列篇章💥 No.文章1AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践2AI大模型探索之路-实战篇:智能化IT领域搜索引擎之GLM-4大模型技术的实践探索3AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获…

list容器的基本使用

目录 前言一,list的介绍二,list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插,头删,尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear 前言 list中的接口比较多,与string和vector类似&am…

【数据库设计】宠物商店管理系统

目录 🌊1 问题的提出 🌊2 需求分析 🌍2.1 系统目的 🌍2.2 用户需求 🌻2.2.1 我国宠物行业作为新兴市场,潜力巨大 🌻2.2.2 我国宠物产品消费规模逐年增大 🌻2.2.3 我国宠物主选…

GPT办公与科研应用、论文撰写、数据分析、机器学习、深度学习及AI绘图高级应用

原文链接:GPT办公与科研应用、论文撰写、数据分析、机器学习、深度学习及AI绘图高级应用https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606667&idx3&sn2c5be84dfcd62d748f77b10a731d809d&chksmfa82606ccdf5e97ad1a2a86662c75794033d8e2e…

数据结构-树的性质

树的定义 树是一个有限数据元素的集合,当数据的量为0时,称为空树。 在一个非空树T中,最上方的结点没有前驱结点,称为根节点。在一个数据量大于1的树中,除了根节点之外的其余数据元素可以被分为m个互不相交的集合T1,T2,…

[leetcode]删除链表中倒数第k个结点

. - 力扣(LeetCode) class Solution { public:ListNode* trainningPlan(ListNode* head, int cnt) {int n 0;ListNode* node nullptr;for (node head; node; node node->next) {n;}for (node head; n > cnt; n--) {node node->next;}retu…

场外期权如何开户?开户有哪些流程?

今天带你了解场外期权如何开户?开户有哪些流程?场外期权是一种金融衍生品,其开户流程和条件对于投资者来说至关重要。 场外期权如何开户? 需要满足532资质,参与者需为法人、合伙企业或其他组织,最近一年末…

《吸血鬼猎人D》观后感

前言 在B站无意中发现了一部动漫电影《吸血鬼猎人D》,看着封面还不错,就试着点开了视频,看了一会儿,发现画面很精美,人物造型高大威猛,肌肉线条清晰可见。如果我没记错的话,这种风格在日本动漫中…

填报志愿选大学专业,文科生如何选专业?

读文科的同学接触的专业知识相对广泛,往往被认为是“万金油”,他们仿佛什么都能做,但是和专业技能类知识不同,缺乏技术支持,从而使得文科专业的就业方向和前景远远比不上理科专业那么明朗,对于众多文科生而…

U-Mail反垃圾邮件网关助力企业抵御垃圾邮件,守护邮箱安全

在数字化时代,电子邮件已成为企业沟通不可或缺的工具,它在促进信息流通和提高工作效率方面扮演着关键角色。然而,随着电子邮件使用的普及,垃圾邮件问题也日益凸显,特别是那些携带恶意软件或钓鱼链接的邮件,…

深度学习(六)——神经网络的基本骨架:nn.Module的使用

一、torch.nn简介 官网地址: torch.nn — PyTorch 2.0 documentation 1. torch.nn中的函数简介 Containers:神经网络的骨架 Convolution Layers:卷积层 Pooling layers:池化层 Padding Layers:Padding Non-linear …

企业数据中台功能介绍

参考视频: 企业级数据中台功能演示_哔哩哔哩_bilibili 具体项目: 平台基础设施: 系统管理,系统监控(登录/操作日志),任务调度 元数据管理: 业务系统管理/数据源管理/数据表管理/字段管理 数据源,元数据,数据授权,变更记…

高性能的分布式块存储,得盘率可以超过 100%吗?

得盘率到底是什么?该怎么计算才公平合理? 随着,现在很多企业用户开始关注存储系统的存储效率。但提及存储效率,业界并没有一个统一的衡量指标。 有些厂商强调数据缩减率,有些厂商强调存储单位密度,而有些厂…

MongoDB——写入耗时

mongodb写入10万条数据的耗时差不多是1s import time import pymongo from pymongo import MongoClient# 连接到MongoDB client MongoClient(mongodb://localhost:27017/) db client[test_db] collection db[test_collection]# 生成10万条数据 documents [{"name&quo…

进阶篇04——视图

简介及基本语法 视图的检查选项 可以通过视图进行数据的增删改查操作,但由于视图是一张虚拟表,所以操作的实际上是视图的基表,即创建视图时select语句操作的表 cascaded 自己还测试了一下这种情况:当V1和V2都没有加检查选项&…

硕思LOGO设计师软件最新版下载及详细安装教程

硕思Logo设计师是一款操作灵活简单,且功能强大的logo制作软件。它可以通过简单的点击就可以为网站、博客、论坛和邮件创建专业的logo、条幅、按钮、标题、图标和签名等。 该软件提供了很多精心设计的模板和丰富的资源,为更好的创建logo艺术作品&#xff…

国外有哪些知名的CG网站?CG平台及云渲染平台

动画创作中的灵感涌现往往伴随着挑战,但全球众多顶尖CG网站平台是您创意的加油站。CG技术的革新与云渲染平台的高效算力,为动画师提供了双重助力,让创意的实现更加迅速和高效。本文精选了国内外备受推崇的CG网站和云渲染平台,旨在…

华三HCL模拟器安装及华三防火墙配置

0、前言 最近跟模拟器杠上了,主要是需要运行防火墙,目前已经成功模拟出华为、山石防火墙,而且模拟出来的设备能与物理网络环境进行互联。现在我又盯上华三防火墙了。 首先下载模拟器: 下载地址:H3C网络设备模拟器官方免…

仰望U8三大黑科技,重新定义智能汽车

文 | 智能相对论 作者 | 雷歌 是时候重新定义中国的“智能汽车”了。 在仰望U8出来以前,普通人对知道的智能汽车的配置认识,智能汽车是智能驾驶智能座舱,硬件上大概是这几样:毫米波雷达激光雷达智驾芯片。 仰望U8出来以后&…