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

相关推荐
sell-cloud1 小时前
Prompt Engineering要凉了?Fable 5.5能“猜“意图,但银行正在封杀AI Agent——企业AI的真正护城河是什么
人工智能·prompt
Navicat中国2 小时前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI3 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区3 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris5 小时前
郴州logo设计机构
大数据·人工智能·python
Goboy5 小时前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V5 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI5 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技5 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
海宇数据5 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化