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.hqwc.cn/news/307310.html

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

相关文章

目标检测 YOLOv5 - 推理时的数据增强

目标检测 YOLOv5 - 推理时的数据增强 flyfish 版本 YOLOv5 6.2 参考地址 https://github.com/ultralytics/yolov5/issues/303在训练时可以使用数据增强,在推理阶段也可以使用数据增强 在测试使用数据增强有个名字叫做Test-Time Augmentation (TTA) 实际使用中使…

解决Github无法上传>100M文件——只需两行代码

文章目录 合作推广,分享一个人工智能学习网站。计划系统性学习的同学可以了解下,点击助力博主脱贫( •̀ ω •́ )✧ 废话不多说,如果在githubpush文件太大时,会报错:this exceeds GitHub’s file size limit of 100.…

迁移Ubuntu报错问题

问题描述: 使用LxRunOffline-v3.5.0-mingw迁移Ubuntu至非系统盘时,出现如下报错 ‘Couldn’t set the case sensitive attribute of the directory “\?\C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\Loc…

MR实战:统计总分与平均分

文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建成绩映射器类5、创建成绩驱动器类6、启…

Arduino stm32 USB CDC虚拟串口使用示例

Arduino stm32 USB CDC虚拟串口使用示例 📍相关篇《STM32F401RCT6基于Arduino框架点灯程序》🔖本开发环境基于VSCode PIO🌿验证芯片:STM32F401RC⌛USB CDC引脚: PA11、 PA12🔧platformio.ini配置信息&…

MIT线性代数笔记-第32讲-基变换,图像压缩

目录 32.基变换,图像压缩图像压缩小波基变换 打赏 32.基变换,图像压缩 图像压缩 图像储存 考虑一个灰度图像,假设它的分辨率为 512 ∗ 512 512 * 512 512∗512像素,其中每一个像素记录了所处位置的灰度值( 0 ∼ 255 0…

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

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

变分贝叶斯近似

马尔可夫链蒙特卡洛方法(MCMC)是一个非常有用和重要的工具,但在用于估计大型数据集的复杂后验分布或模型时可能会遇到困难。变分近似(variational approximations)或变分推断(variational inference&#x…

扫雷(c语言)

先开一个test.c文件用来游戏的逻辑测试,在分别开一个game.c文件和game.h头文件用来实现游戏的逻辑 主要步骤: 游戏规则: 输入1(0)开始(结束)游戏,输入一个坐标,如果该坐…

下载安装克魔助手

摘要 本文介绍了如何下载安装克魔助手工具,以及注册和登录流程。通过简单的步骤,用户可以轻松获取并使用该工具,为后续的手机应用管理操作做好准备。 引言 克魔助手是一款免费的手机管理工具,通过该工具用户可以方便地在电脑上…

利用 PEB_LDR_DATA 结构枚举进程模块信息

1. 引言 我们常常通过很多方法来获取进程的模块信息,例如 EnumProcessModules 函数、CreateToolhelp32Snapshot 函数、WTSEnumerateProcesses 函数、ZwQuerySystemInformation 函数等。但是调用这些接口进行模块枚举的原理是什么我们并不知道。通过学习 PEB 中 PEB…

GrayLog日志平台的基本使用-ssh之Email报警

1、首先编辑并添加邮件配置到server.conf(注意:是添加) vim /etc/graylog/server/server.conf # Email transport transport_email_enabled true transport_email_hostname smtp.qq.com transport_email_port 465 transport_email_use_a…