《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三色通道的提取与合并--超详细解读

相关推荐
俊哥V3 分钟前
每日 AI 研究简报 · 2026-04-06
人工智能·ai
SomeB1oody3 分钟前
【Python深度学习】1.2. 多层感知器MLP(人工神经网络)实现非线性分类理论
开发语言·人工智能·python·深度学习·机器学习·分类
AI浩1 小时前
PaveSync:用于路面病害分析与分类的统一综合数据集
人工智能·机器学习·分类·数据挖掘
code 小楊1 小时前
通义千问Wan2.7系统图像&视频模型全解析(含实测测评+多模型对比+核心数据)
人工智能·计算机视觉
deephub1 小时前
机器学习特征工程:缩放、编码、聚合、嵌入与自动化
人工智能·python·机器学习·特征工程
小龙报2 小时前
【Coze-AI智能体平台】Coze智能体实操:翻译助手从工作流搭建到应用发布全流程详解
人工智能·深度学习·计算机视觉·chatgpt·语音识别·文心一言·集成学习
IT_陈寒7 小时前
React Hooks闭包陷阱:你以为的state可能早就过期了
前端·人工智能·后端
Thomas.Sir8 小时前
第一章:Agent智能体开发实战之【初步认识 LlamaIndex:从入门到实操】
人工智能·python·ai·检索增强·llama·llamaindex
笨笨饿8 小时前
29_Z变换在工程中的实际意义
c语言·开发语言·人工智能·单片机·mcu·算法·机器人
boy快快长大8 小时前
【大模型应用开发】记忆
人工智能