千家信息网

opencv与numpy图像的基本操作方法是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文小编为大家详细介绍"opencv与numpy图像的基本操作方法是什么",内容详细,步骤清晰,细节处理妥当,希望这篇"opencv与numpy图像的基本操作方法是什么"文章能帮助大家解决疑惑,下面跟
千家信息网最后更新 2026年11月01日opencv与numpy图像的基本操作方法是什么

本文小编为大家详细介绍"opencv与numpy图像的基本操作方法是什么",内容详细,步骤清晰,细节处理妥当,希望这篇"opencv与numpy图像的基本操作方法是什么"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

1. 像素基本操作

1.1 读取、修改像素

可以通过[行,列]坐标来访问像素点数据,对于多通道数据,返回一个数组,包含所有通道的值,对于单通道数据(如gray),返回指定坐标的值,也可以通过 [行,列,通道index] 来访问某坐标某通道的值。

>>> import cv2>>> import numpy as np>>> img = cv2.imread('messi5.jpg')
>>> px = img[100,100]>>> print( px )[157 166 200]# accessing only blue pixel>>> blue = img[100,100,0]>>> print( blue )157

可以直接通过坐标修改像素值

>>> img[100,100] = [255,255,255]>>> print( img[100,100] )[255 255 255]

然而直接像上面这样去读取、修改每个像素的值,效率是比较低的,可以使用下面的方法,效率是更高的

# accessing RED value>>> img.item(10,10,2)59# modifying RED value>>> img.itemset((10,10,2),100)>>> img.item(10,10,2)100

1.2 读取图像属性

读取图像尺寸,返回一个元组 (行,列,通道数)

>>> print( img.shape )(342, 548, 3)

读取像素大小, 行 列 通道数

>>> print( img.size )562248

像素数据类型

>>> print( img.dtype )uint8

1.3 图像ROI操作

可以直接编辑像素区域,例如把图像左下角50*50的像素复制到左上角

import cv2import numpy as npimg = cv2.imread("test.jpg")print(img.shape)roiTest = img[475:525, 0:50]img[0:50, 0:50] = roiTestcv2.imshow("image",img)cv2.waitKey(0)

1.4 分割、合并通道

有些情况下需要对图像的某一通道数据进行操作,此时会用到分割、合并通道数据

>>> b,g,r = cv2.split(img)>>> img = cv2.merge((b,g,r))

或者

b = img[:,:,0]

假设想编辑红色通道的数据,全部设置为0,不需要这样分割后编辑, img[:,:,2] = 0 这样即可。cv2.split操作是一个很耗时的操作,可以用numpy索引替代的操作,尽量用numpy索引来做。

1.4 生成图像边框

使用 cv2.copyMakeBorder 函数可添加图像边框,支持多种边框算法

void cv::copyMakeBorder ( InputArray src, //原图//目标图(cpp版本中,若传入此数据且选BORDER_TRANSPARENT,则此数据被top/bottom/left/right切出来的roi部分不会被做任何修改,此图像大小=dst.rows+top+bottom,dst.cols+left+right)OutputArray dst, int top, //top/left/bottom/right 四个方向上的边框像素int bottom,int left,int right,int borderType, //边框类型见下图const Scalar & value = Scalar() //边框类型为BORDER_CONSTANT时的边框像素)

BLUE = [255, 0, 0] img1 = cv2.imread("test.jpg") replicate = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_REPLICATE) reflect = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_REFLECT) reflect101 = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_REFLECT_101) wrap = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_WRAP) constant = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_CONSTANT, value=BLUE) print(img1.shape, reflect.shape) plt.subplot(231), plt.imshow(img1, 'gray'), plt.title('ORIGINAL') plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE') plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT') plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101') plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP') plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT') plt.show()

上面的例子可以比较直观的看到各种border的效果,同时也能发现,python版的api与cpp版本的相比,默认初始化了一块原始图尺寸+各方向边框尺寸的图像内存,作为内置的dst参数。

输出尺寸:(525, 700, 3) (725, 900, 3)

2. 图像的基本算术操作

2.1 图像相加

图像相加,两个图像应该有相同的shape,或者图像和一个标量相加,或者图像和一个与其通道数相同的一维数组相加。

opencv的相加与numpy相加时,在超出数据类型范围时的处理不同

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

cpp版本的api还支持mask等参数

void cv::add ( InputArray src1,InputArray src2,OutputArray dst,InputArray mask = noArray(),int dtype = -1 )

2.2 图像混合

opencv通过 cv::addWeighted 函数提供了将两个图像混合在一起的方法

dst=α⋅img1+β⋅img2+γ

img1 = cv2.imread('ml.png')img2 = cv2.imread('opencv-logo.png')dst = cv2.addWeighted(img1,0.7,img2,0.3,0)cv2.imshow('dst',dst)cv2.waitKey(0)cv2.destroyAllWindows()

通过cv2.seamlessClone函数还能做更精细的图像局部融合。

读到这里,这篇"opencv与numpy图像的基本操作方法是什么"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

图像 像素 通道 数据 边框 方法 基本操作 坐标 尺寸 类型 函数 文章 版本 相同 两个 内容 参数 可以通过 大小 效率 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技图片 美国互联网保险保险科技 华宇互联网科技 上海挚品互联网科技 顺玮阁互联网科技 猫创互联网科技 成都狮子座互联网科技 广州新华互联网科技学校电竞方面 明优互联网科技有限公司 互联网时代的科技公司 高科技互联网套路 产业互联网科技服务公司 宁波跨境商互联网科技有限公司 兰石爱特工业互联网科技分公司 易租星互联网科技有限公司 科技和互联网行业的特点 北京军民互联网科技公司 保山浩联互联网科技有限公司 互联网科技创业有什么好项目 互联网 科技节活动 微视频大赛 中资互联网科技 互联网医疗科技 南京欣网互联网科技 互联网高科技股票 玖二柒互联网科技公司待遇 互联网科技教育视频 领航科技大厦互联网公司 九思连强互联网电子科技有限公司 珠海东科互联网科技有限公司 互联网 科技节活动 微视频大赛
0