OpenCV入门01:图像处理简介/图像的基础操作

项目开源,地址:https://gitee.com/zccbbg/opencv_study

文章目录

  • 图像处理简介
    • 灰度图像
    • 二值图像
    • 彩色图
  • opencv 介绍
  • 图像基础操作
    • 图像读取与显示
    • 绘制几何图形
    • 图像的属性
    • 其他操作
    • 算数操作
      • 加法
      • 混合
    • 图像色彩空间转换

图像处理简介

灰度图像

● 灰度图像是由灰度级组成的图像,每个像素的灰度级表示图像中的亮度。通常,灰度级在0到255之间,其中0表示黑色,255表示白色。
● 在灰度图像中,每个像素都有一个单一的数值,表示该像素的亮度。因此,灰度图像是单通道图像。

二值图像

不是黑就是白
二值图像是一种特殊的灰度图像,其中每个像素只能取两个值,通常是0或1。这两个值通常分别代表黑色和白色,或者表示某种特定的目标和背景。

彩色图

彩色图像是一种图像表示方式,它包含了多个颜色通道的信息,相对于灰度图像而言,彩色图像能够更真实地表达物体的颜色。彩色图像通常用于涉及色彩信息的图像处理、计算机视觉和图形学等领域。

常见的彩色图像有三种基本颜色通道,即红色(R,代表Red)、绿色(G,代表Green)、蓝色(B,代表Blue),这种颜色模型被称为RGB颜色模型。在RGB颜色模型中,每个像素由这三个颜色通道的数值组成,形成一个三维的颜色空间。通过不同的组合,可以生成各种颜色。

除了RGB颜色模型,还有其他颜色模型,如CMYK(青、品红、黄、黑)用于印刷领域,HSV(色调、饱和度、明度)用于颜色的直观表示等。

彩色图像相对于灰度图像具有更丰富的信息,可以提供更多关于场景的细节,这对于许多应用是至关重要的。在计算机视觉任务中,彩色信息通常用于物体识别、图像分割等,而在图形学中,彩色图像则用于渲染真实感图像。

opencv 介绍

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了许多用于图像处理和计算机视觉的功能和工具。以下是一些常见的OpenCV模块:

  1. Core 模块(core):提供基本的数据结构、算法和功能,如图像的读取、写入、操作等。

  2. Imgproc 模块(imgproc):包含图像处理函数,如图像平滑、边缘检测、图像变换等。

  3. HighGUI 模块(highgui):用于创建简单的用户界面,包括图像显示窗口、滑动条等。

  4. Video 模块(video):包含视频处理相关的功能,如视频捕捉、视频编解码等。

  5. Calib3d 模块(calib3d):用于相机标定、三维重建和相机姿态估计等计算机视觉任务。

  6. Features2d 模块(features2d):提供了特征检测和描述子提取的函数,如SIFT、SURF、ORB等。

  7. Objdetect 模块(objdetect):包含用于目标检测的功能,如Haar级联分类器。

  8. Videoio 模块(videoio):用于读写视频文件和摄像头数据的功能。

  9. ML 模块(ml):提供机器学习相关的功能,包括支持向量机(SVM)和k最近邻(k-NN)等。

  10. Flann 模块(flann):用于快速最近邻搜索的库。

  11. Dnn 模块(dnn):包含深度学习模型的功能,可以用于加载和运行深度学习模型。

  12. Photo 模块(photo):提供了一些图像编辑和修复的工具,如色彩校正和图像修复。

  13. Stitching 模块(stitching):用于图像拼接和全景图像创建的功能。

  14. Shape 模块(shape):包含形状分析和匹配的函数。

图像基础操作

图像读取与显示

import cv2 as cv
# 以灰度图的形式读取图像
img = cv.imread('../images/test.jpg',0)
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

读取方式的标志
cv.IMREAD*COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数。

cv.IMREAD*GRAYSCALE:以灰度模式加载图像

cv.IMREAD_UNCHANGED:包括alpha通道的加载图像模式。

可以使用1、0或者-1来替代上面三个标志

绘制几何图形

cv.line(): 绘制直线

cv.circle(): 绘制圆形

cv.rectangle(): 绘制矩形

cv.putText(): 在图像上添加文字

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1 创建一个空白的图像
img = np.zeros((512,512,3), np.uint8)
# 2 绘制图形
cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv.circle(img,(447,63), 63, (0,0,255), -1)
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
# 3 图像展示
plt.imshow(img[:,:,::-1])
plt.title('匹配结果'), plt.xticks([]), plt.yticks([])
plt.show()

图像的属性

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=img.png&pos_id=img-9lvkHwe5-170384582505

其他操作

直接使用行列索引获取图像中的像素并进行修改

拆分通道:cv.split()

通道合并:cv.merge()

色彩空间的改变: cv.cvtColor(input_image,flag)

算数操作

加法

你可以使用OpenCV的cv.add()函数把两幅图像相加,或者可以简单地通过numpy操作添加两个图像,如res = img1 + img2。两个图像应该具有相同的大小和类型,或者第二个图像可以是标量值。

注意:OpenCV加法和Numpy加法之间存在差异。OpenCV的加法是饱和操作,而Numpy添加是模运算。

注意:这里都要求两幅图像是相同大小的。

参考以下代码:

>>> x = np.uint8([250])
>>> y = np.uint8([10])
>>> print( cv.add(x,y) ) # 250+10 = 260 => 255
[[255]]
>>> print( x+y )          # 250+10 = 260 % 256 = 4
[4]

混合

将两幅图像按照不同的比例进行混合
注意:这里都要求两幅图像是相同大小的。

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt# 1 读取图像
img1 = cv.imread("view.jpg")
img2 = cv.imread("rain.jpg")# 2 图像混合
img3 = cv.addWeighted(img1,0.7,img2,0.3,0)# 3 图像显示
plt.figure(figsize=(8,8))
plt.imshow(img3[:,:,::-1])
plt.show()

图像色彩空间转换

cvtColor()函数是opencv里的颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间的转换,也可以转换成灰度图像。

HSV颜色模型
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。
色调H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
饱和度S:取值范围为0.0~1.0;
亮度V:取值范围为0.0(黑色)~1.0(白色)。

def color_space_demo():image = cv.imread("../images/test.jpg")gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #将加载的彩色图像转换为灰度图像hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV) #将加载的彩色图像转换为HSV颜色空间cv.imshow("gray",gray)cv.imshow("hsv",hsv)cv.waitKey(0)cv.destroyAllWindows()if __name__ == '__main__':color_space_demo()

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

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

相关文章

VIOOVI干货分享:生产标准工时的计算与观测次数确认

在制造业中,生产标准工时是一个关键指标,它可以帮助企业确定生产效率、评估员工绩效以及优化生产流程。本文将介绍生产标准工时的计算方法,并探讨如何确认观测次数,以充分利用ECRS工时分析软件。 一、生产标准工时的计算 生产标准…

【WPF.NET开发】对象生存期事件

本文内容 先决条件视觉对象的生存期事件其他生存期事件 在所有对象的生存期内,Microsoft .NET 托管代码中的所有对象都会经历“创建”、“使用”和“销毁”的阶段。 当关于这些阶段的通知出现在对象上时,Windows Presentation Foundation (WPF) 会通过…

售后客服日常回复必备的话术

致歉安抚通用 1.非常抱歉耽误您宝贵的时间了,这边给您查询一下,请稍等。 2.非常抱歉,给您添麻烦了。这边为您转接售后专员给您处理,请亲稍等。 3.影响到您的购物体验万分抱歉。 4.这边都会给您尽心解决的呢。 5.我非常理解您…

算法:加油站

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、问题描述 二、原始解法 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、问题描述 在一条环路上有N个加油站,其中第…

深度解析高防产品---游戏盾

游戏盾是针对游戏行业所推出的高度可定制的网络安全解决方案,游戏盾是高防产品系列中针对游戏行业的安全解决方案。游戏盾专为游戏行业定制,针对性解决游戏行业中复杂的DDoS攻击、游戏CC攻击等问题。游戏盾通过分布式的抗D节点,可以防御TB级大…

@PersistenceContext和@Autowired在EntityManager上应用的不同

首先PersistenceContext是jpa专有的注解,而Autowired是spring自带的注释 上方图片的意思就是EntityManager不是线程安全的,当多个请求进来的时候,spring会创建多个线程,而PersistenceContext就是用来为每个线程创建一个EntityMana…

AI渲染:改变图像和视频制作的技术革命

随着人工智能(AI)技术的飞速发展,其应用领域已经覆盖了从医疗、教育到娱乐、艺术等各个行业。其中,AI在图像和视频制作领域的应用尤为引人注目,而AI渲染则是这一领域中的一颗璀璨明珠。AI渲染利用人工智能算法对图像和…

智能外呼系统全新升级,携手企业迈向高效转化新时代

智能外呼系统已成为企业提升业务效率和转化率的重要工具。随着人工智能技术的不断进步,智能外呼系统迎来了全面升级,旨在进一步助力企业优化客户沟通流程,提高业务转化效率。 新升级的智能外呼系统采用了更先进的自然语言处理技术&#xff0c…

Linux free命令使用教程(free指令)(查看内存、系统内存、内存占用、内存使用情况)

文章目录 Linux free命令使用教程1. free命令简介2. free命令选项2.1 显示单位(free -b、free -k、free -m、free -g)2.2 使用人类可读的格式(free -h)2.3 显示总计数(free -t)2.4 连续监视内存使用 3. 解析…

新疆老人扶梯摔倒铁路民警秒速救援 揭秘富维智能识别跌倒技术

近日,吐鲁番北站进站口一位年长的乘客在火车站的扶梯上突然失去平衡摔倒了,紧张的一幕在铁路民警的快速反应下得到了及时的处理。这位民警的敏捷和专业救援能力赢得了大家的称赞,同时也让我们思考:如何更好地及时报警这类事故的发…

【强化学习】基于蒙特卡洛MC与时序差分TD的简易21点游戏应用

1. 本文将强化学习方法(MC、Sarsa、Q learning)应用于“S21点的简单纸牌游戏”。 类似于Sutton和Barto的21点游戏示例,但请注意,纸牌游戏的规则是不同且非标准的。 2. 为方便描述,过程使用代码截图,文末附链…

马斯克谈六西格玛:管理质量与火箭科学如何相辅相成

如果你问我,作为一个有志于送人类上火星的家伙,六西格玛管理有没有用?我会说,如果把火箭控制的精度与六西格玛得到的生产质量相比,你会发现两者都追求同一件事:接近零缺陷的完美。 六西格玛不只是一组工具…

elasticsearch系列七:聚合查询

概述 今天咱们来看下es中的聚合查询,在es中聚合查询分为三大类bucket、metrics、pipeline,每一大类下又有十几种小类,咱们各举例集中,有兴许的同学可以参考官网:https://www.elastic.co/guide/en/elasticsearch/refere…

np.copy()是深拷贝还是浅拷贝

np.copy到底是深拷贝还是浅拷贝 实验1. 拷贝矩阵2. 修改m的值3. 修改拷贝矩阵的值 官方文档参考文档 最近在用numpy的拷贝操作,发现网上对np.copy()究竟是深拷贝还是浅拷贝说法不一致,因此记录一下。 总结:如果numpy array是一个简单的数组&…

yolov7中添加fppi评价指标

参考:https://blog.csdn.net/liuhao3285/article/details/135233281?spm1001.2014.3001.5502 fppifp/image_num yolov7中增加FPPI FPPI实现 yolo7中的评价指标实现位于utils/metrics.py中,我们只需要参照mAP指标在其中增加FPPI的内容即可:…

6、LLaVA

简介 LLaVA官网 LLaVA使用Vicuna(LLaMA-2)作为LLM f ϕ ( ⋅ ) f_\phi() fϕ​(⋅),使用预训练的CLIP图像编码器 ViT-L/14 g ( X v ) g(X_v) g(Xv​)。 输入图像 X v X_v Xv​,首先获取feature Z v g ( X v ) Z_vg(X_v) Zv​g(Xv​)。考虑到最后一…

复试 || 就业day03(2023.12.29)算法篇

文章目录 前言同构字符串存在重复元素有效的字母异位词丢失的数字单词规律 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫文章题目大多来自于 leetcode,当然也可能来自洛谷或其他刷题平台 💫欢迎大…

【Linux系统编程二十五】:线程概念(Linux中的轻量级进程)

【Linux系统编程二十五】:线程概念(Linux中的轻量级进程) 一.线程的概念1.地址空间是资源窗口 二.线程初步理解1.进程执行分支(内部运行)2.执行粒度更细3.重构进程概念:系统资源分配的基本实体4.重构线程概念:系统调度的基本单位5…

springcloud中使用openfeign来优化接口调用

简单介绍在springcloud中使用openfeign来优化接口调用 目录 一、引入依赖二、为服务提供者编写openfeign接口三、服务消费者调用定义的openfeign接口四、项目结构五、日志级别配置1、通过配置类进行全局配置2、通过配置类进行局部配置3、通过配置文件配置 一、引入依赖 <!-…

业务中台-上线切换计划篇

业务中台上线&#xff0c;是一项涉及众多复杂环节的重大任务。以我们当前的项目为例&#xff0c;新增接口多达50多个&#xff0c;原系统接口需调整30多个&#xff0c;同时还需要处理流程、期初数据、数据迁移、人员、权限等各个方面。结合我在项目中的实际经验&#xff0c;本文…