《OpenCV 图像基础操作全解析:从读取到像素处理与 ROI 应用》

简介:本文详细介绍了使用 OpenCV 进行图像相关操作的基础知识与实践示例,涵盖图像读取(包括不同读取方式及对应效果)、灰度值概念与图像矩阵存储特点、通道相关知识(如 BGR、通道拆分与合并),还展示了像素处理及感兴趣区域(ROI)操作,包含像素修改、图像缩放等内容,并通过具体的图片示例辅助理解,帮助读者快速掌握 OpenCV 在图像基础处理方面的运用。

如果你觉得我的文章对你的OpenCV学习有所帮助,请你点赞收藏关注,学习更多和OpenCV相关的知识

OpenCV:图像的读取与保存

  • [1 读取图像](#1 读取图像)
  • [2 像素的处理与ROI](#2 像素的处理与ROI)
  • 致谢

1 读取图像

比如我们的项目下面有一张图片,(至于这个图片,你们可以选择自己喜欢的图片,也可以截图我的图片,然后重命名,大家随意就行):

我们要把他读取到项目中,需要使用cv2.imread函数

1.1 cv2.imread

cv2.imread( 参数1 :filename,参数2:flags)

filename:读取的文件名,如果和代码不在同一文件夹下,要加上文件的路径

flags:读取方式,默认值为1,默认读取为BGR图像。(如果您不了解什么是BGR,稍安勿躁,我会在1.3中讲解)。-1是保持图片原格式不变,0是转变为单通道的灰度值图像(不了解通道和灰度值也不要急我会在1.3讲通道 1.2讲灰度值)

理论说这么多不如运行一下看看结果

python 复制代码
import cv2
import matplotlib.pyplot as plt
image_pig = cv2.imread("pig.jpg")
cv2.imshow("show_pig",image_pig)
cv2.waitKey()
cv2.destroyAllWindos()

现在把文件读取方式改为0看一下情况

python 复制代码
image_pig = cv2.imread("pig.jpg",flags = 0)

这是一幅灰度值图像,我们将在1.2中讲解

1.2灰度值

我们输出一下他的矩阵内容

python 复制代码
import numpy as np
import cv2
import matplotlib.pyplot as plt
image_pig = cv2.imread("pig.jpg",flags = 0)

print(type(image_pig))
print(image_pig)
print(image_pig.shape)

这个结果说明OpenCV读取到的图像是按numpy中的ndarray数组类型存储的。920,684是他的高和宽。他的每一个数据代表这这一个像素点的灰度值,灰度值是从0-255.比如我们创建一个全0矩阵

python 复制代码
import numpy as np
import cv2
black_image = np.zeros([300,300],dtype = np.uint8)
cv2.imshow('black',black_image)
cv2.waitKey()
cv2.destroyAllWindows()

他就是一张黑色的图像,我们现在创建一个全255的矩阵

python 复制代码
import numpy as np
import cv2
black_image = 255*np.ones([300,300],dtype = np.uint8)
cv2.imshow('black',black_image)
cv2.waitKey()
cv2.destroyAllWindows()

1.3通道与BGR

要讲明白通道,就要从BGR 是什么开始讲,首先我们要知道BGR代表着彩色图片,或者说他能呈现彩色图片。回到彩色猪猪图,运行一下代码看一下

python 复制代码
import cv2
import numpy as np
image_pig = cv2.imread("pig.jpg")
print(image_pig.shape)

而灰度图像的运行结果呢,代码你们可以往上翻,我这里直接把运行结果复制下来

发现区别了吧,就是前者是一个shape为[height,width,通道数]的数组,而灰度值图像的通道数为1。

BGR:就是蓝色 绿色 红色灰度值的叠加,B G R 是矩阵存储的顺序,我给大家拆分一下。拆分之前要补充一个知识点通道拆分,请见1.4

1.4 通道的拆分与合并

cv2.split()函数可以把通道拆分

cv2.merge()函数可以把通道合并

复制下面的这段代码运行一下,这段代码讲了将pig.jpg拆分成bgr三个通道,以及融合成rgb

python 复制代码
import cv2
import matplotlib.pyplot as plt
image_pig = cv2.imread("pig.jpg")
b,g,r = cv2.split(image_pig)
cv2.imshow("original_image",image_pig)
cv2.imshow("blue_channel",b)
cv2.imshow("green_channel",g)
cv2.imshow("red_channel",r)
rgb_image_pig = cv2.merge([r,g,b])
cv2.imshow("r_g_b_image",rgb_image_pig)
cv2.waitKey()
cv2.destroyAllWindows()

2 像素的处理与ROI

这一章的重点在于ROI,先知道可以修改,然后在选择特定区域ROI完成简单图像处理

2.1 像素修改图片

还是拿猪猪侠的图片举例子,比如我想把猪头给截取下来,应该这么做

python 复制代码
import cv2
import matplotlib.pyplot as plt
image_pig = cv2.imread("pig.jpg")
print(image_pig.shape)
ROI_image = image_pig[200:500,100:450]
cv2.imshow("pig_head",ROI_image)
cv2.waitKey()
cv2.destroyAllWindows()
# cv2.imshow("show_pig",image_pig)
# cv2.waitKey()
# cv2.destroyAllWindows()

,我现在想把他换到超人强的头脑上。我在我的文件夹中加入了从网上截取的一张图片起名叫做blue_pig.JPG

然后再导入超人强,找一些超人强脑袋的位置

python 复制代码
import cv2
import numpy as np
blue_pig = cv2.imread("blue_pig.JPG")
print(blue_pig.shape)
Roi_blue = blue_pig[20:160,10:210]
cv2.imshow("blue_head",Roi_blue)
cv2.waitKey()
cv2.destroyAllWindows()

现在我们遇到了问题,这两部分图片大小不一致,所以我们要进行缩放,请到2.2学习缩放

2.2缩放与ROI

image_return = cv2.resize(缩放的原始图像,输出图像大小 ,水平方向缩放比例fx,竖直方向缩放比例fy)

如果设置了输出图像大小dsize,就不需要在设置缩放比例。

我们现在就可以实现把猪猪侠的脑袋缩放成更超人强的脑袋一般大小然后替换

python 复制代码
import cv2
import matplotlib.pyplot as plt
image_pig = cv2.imread("pig.jpg")
print(image_pig.shape)
ROI_image = image_pig[200:500,100:450]

blue_pig = cv2.imread("blue_pig.JPG")
print(blue_pig.shape)
Roi_blue = blue_pig[20:160,10:210]
ctrl_c_read_roi = cv2.resize(ROI_image,(200,140))
blue_pig[20:160,10:210] = ctrl_c_read_roi

cv2.imshow("multi_red_and_blue",blue_pig)
cv2.waitKey()
cv2.destroyAllWindows()

致谢

本文参考了一些博主的文章,博取了他们的长处,也结合了我的一些经验,对他们表达诚挚的感谢,使我对OpenCV 的使用有更深入的了解,也推荐大家去阅读一下他们的文章。纸上学来终觉浅,明知此事要躬行:
图片缩放cv2.resize()详解
[opencv教程(三)]ROI区域(图片截取)
【OpenCV】BGR三色通道的提取与合并--超详细解读

相关推荐
Jeremy_lf17 分钟前
【生成模型之三】ControlNet & Latent Diffusion Models论文详解
人工智能·深度学习·stable diffusion·aigc·扩散模型
桃花键神1 小时前
AI可信论坛亮点:合合信息分享视觉内容安全技术前沿
人工智能
野蛮的大西瓜1 小时前
开源呼叫中心中,如何将ASR与IVR菜单结合,实现动态的IVR交互
人工智能·机器人·自动化·音视频·信息与通信
CountingStars6192 小时前
目标检测常用评估指标(metrics)
人工智能·目标检测·目标跟踪
tangjunjun-owen2 小时前
第四节:GLM-4v-9b模型的tokenizer源码解读
人工智能·glm-4v-9b·多模态大模型教程
冰蓝蓝2 小时前
深度学习中的注意力机制:解锁智能模型的新视角
人工智能·深度学习
橙子小哥的代码世界2 小时前
【计算机视觉基础CV-图像分类】01- 从历史源头到深度时代:一文读懂计算机视觉的进化脉络、核心任务与产业蓝图
人工智能·计算机视觉
新加坡内哥谈技术3 小时前
苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架
大数据·人工智能·语言模型
小陈phd3 小时前
OpenCV学习——图像融合
opencv·计算机视觉·cv
fanstuck3 小时前
Prompt提示工程上手指南(七)Prompt编写实战-基于智能客服问答系统下的Prompt编写
人工智能·数据挖掘·openai