news 2026/4/23 19:19:04

opencv图片处理常见操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
opencv图片处理常见操作

今天学习opencv对图片的常见处理操作,包括:图片的打码,组合,放缩,加法运算,加权运算,以及图片的模糊处理(平滑处理)

1、图片打码

代码:

import cv2 import numpy as np # 图片打码 a = cv2.imread(r'img.png') a[100:200,200:300] = np.random.randint(0,256,(100,100,3))#矩阵赋值必须是相同大小 cv2.imshow( 'masaike',a)

(100,100,3)表示生成100行100列三通道的三维数组。

运行结果:

2、图片组合和缩放

代码:

import cv2 a = cv2.imread('img_1.png') b = cv2.imread('img.png') b[20:100,20:100] = a[20:100,20:100]#注意:矩阵的大小必须要统一。 cv2.imshow( 'b',b) cv2.imshow( 'a',a) # 图片缩放cv2.resize # 用于调整图像的大小。它有以下几个参数: # src:要调整大小的输入图像,可以是numpy数组、PIL图像或其他类型。 # dsize:输出图像的大小,可以是一个元组,例如(宽,高),或者使用整数标量来缩放原始图像。如果dsize为None,则根据scalex和scaley # fx:沿x轴的缩放系数。 # fy:沿y轴的缩放系数。 a = cv2.imread('img.png') # a_new = cv2.resize(a,(600,200)) # 宽、高 a_new = cv2.resize(a,dsize=None,fx=1.5,fy=0.5) cv2.imshow( 'a1',a) cv2.imshow('a_new',a_new) cv2.waitKey(0) cv2.destroyAllWindows()

运行结果:

3、图片运算

代码:

import cv2 '''---------图像运算---------''' # 图像加法运算 # 对于+号运算,当对图像a,图像b进行加法求和时,遵循以下规则: # 当某位置像素相加得到的数值小于255时,该位置数值为两图像该位置像素相加之和 # 当某位置像素相加得到的数值大于255时,该位置数值将截断结果并将其减去 256 例如:相加后是260,实际是260-256=4 a = cv2.imread('img.png') b = cv2.imread('img_1.png') c = a+10 #图片 cv2.imshow( 'yuan',a) cv2.imshow( 'a+10',c) cv2.waitKey(0) c = a[50:100,50:100]+b[50:100,50:100] cv2.imshow( 'a+b',c) cv2.waitKey(0) # 对于cv2.add()运算,当对图像a,图像b进行加法求和时,遵循以下规则: # 当某位置像素相加得到的数值小于255时,该位置数值为两图像该位置像素相加之和 # 当某位置像素相加得到的数值大于255时,该位置数值为255 a = cv2.imread('img.png') b = cv2.imread('img_1.png') b = cv2.resize(b, (100,100)) a = cv2.resize(a, dsize= (100,100)) c = cv2.add(a,b) #也可以使用使用 cv2.imshow( 'a add b',c) cv2.waitKey(0) # 图像加权运算 # 就是在计算两幅图像的像素值之和时,将每幅图像的权重考虑进来,可以用公式表示为dst=src1×α+src2×β+γ a = cv2.imread('img.png') b = cv2.imread('img_1.png') b = cv2.resize(b, dsize= (400,400)) a = cv2.resize(a, dsize= (400,400)) # c =cv2.addWeighted(a, 0.5,b, 0.5, 10) # 10:图像的亮度值(常数),将添加到加权和上 cv2.imshow( 'addWeighted',c) cv2.waitKey(0) cv2.destroyAllWindows()

运行结果:

4、平滑处理(模糊处理)

选取一个像素点,一附近的像素点代替,代替方式是使用滤波器,滤波器是一个卷积核,通过卷积核实现均值,中值等运算。

代码:给加入噪声的图片进行平滑处理消除噪声,我们看下集中处理方式的用法和效果:

'''---------图像平滑处理---------''' # 图像平滑(smoothing)也称为"模糊处理"(bluring) # 通过消除图像中的噪声或细节来使图像看起来更为模糊,从而实现平滑效果 # 可以用来压制、弱化、消除图像中的细节、突变和噪声。 # 下面是常用的一些滤波器 # 均值滤波 -> blur函数 # 方框滤波 -> boxFilter函数 # 高斯滤波->GaussianBlur函数 # 中值滤波->medianBlur函数 # dst=cv2.blur(src,ksize,anchor,borderType) # dst是返回值 # src是需要处理的图像 # ksize是滤波核(卷积核)的大小 # anchor是锚点,默认值是(-1,-1)一般无需更改 # borderType是边界样式,一般无需更改 # 一般情况下,使用dst=cv2.blur(src,ksize)即可 import cv2 import numpy as np # 1个用法 def add_peppersalt_noise(image, n=10000): result = image.copy() h, w = image.shape[:2] # 获取图片的高和宽 for i in range(n): # 生成n个椒盐噪声 x = np.random.randint(0, h) y = np.random.randint(0, w) if np.random.randint(0, 2) == 0: result[x, y] = 0 else: result[x,y] = 255 return result # ## image = cv2.imread('img.png') cv2.imshow('yuan',image) cv2.waitKey(0) noise = add_peppersalt_noise(image) cv2.imshow('noise',noise) cv2.waitKey(0) # ## 1、均值滤波 blur blur_1 = cv2.blur(noise, (3,3)) #卷积核为3,3 效果一般,清晰度一般 cv2.imshow('blur_1',blur_1) cv2.waitKey(0) blur_2 = cv2.blur(noise, (63,63)) cv2.imshow('blur_2',blur_2) cv2.waitKey(0) #### dst=cv2.boxFilter(src,ddepth,ksize,anchor,normalize,borderType)式中: #### dst是返回值,表示进行方框滤波后得到的处理结果。 #### src 是需要处理的图像,即原始图像。 #### ddepth是处理结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度。(可以理解为数据类型) #### ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中所选择的邻域图像的高 度和宽度。 #### anchor 是锚点,(指对应哪个区域) #### normalize 表示在滤波时是否进行归一化。 #### 1.当值为True时,归一化,用邻域像素值的和除以面积。 此时方框滤波与 均值滤波 效果相同。 #### 2.当值为False时,不归一化,直接使用邻域像素值的和。和>255时使用255 boxFilter_1 = cv2.boxFilter(noise,-1, ksize=(3,3),normalize = True) # 2、方框滤波 cv2.imshow('boxFilter_1',boxFilter_1) cv2.waitKey(0) boxFilter_2 = cv2.boxFilter(noise,-1, ksize=(3,3),normalize = False) cv2.imshow('boxFilter_2',boxFilter_2) cv2.waitKey(0) #### cv2.GaussianBlur(src, ksize[, sigmaX[, sigmaY[, dst]]])高斯滤波 #### 参数说明: #### src:输入图像,通常是一个NumPy数组。 #### ksize:滤波器的大小,它是一个元组,表示在水平和垂直方向上的像素数量。例如,(5, 5)表示一个5x5的滤波器。 #### sigmaX和sigmaY:分别表示在X轴和Y轴方向上的标准差。这些值与滤波器大小相同。默认情况下,它们都等于0,这意味着没有高斯模糊。 #### dst:输出图像,通常是一个NumPy数组。如果为None,则会创建一个新的数组来存储结果。 GaussianB = cv2.GaussianBlur(noise, ksize=(3,3), sigmaX=1) #标准差为1,标准正太分布。 3、高斯滤波 cv2.imshow('GaussianBlur',GaussianB) cv2.waitKey(0) # cv2.medianBlur(src, ksize[, dst]])中值滤波 # 参数说明: # src:输入图像。 # ksize:滤波器的大小,它是一个整数,表示在水平和垂直方向上的像素数量。例如,5表示一个5x5的滤波器。 # dst:输出图像,通常是一个NumPy数组。如果为None,则会创建一个新的数组来存储结果。 medianB = cv2.medianBlur(noise, ksize=3) # 4、中值滤波 cv2.imshow('medianBlur',medianB) cv2.waitKey(0) cv2.destroyAllWindows()

运行结果:

以上就是今天给大家分享的图片处理核心知识点:图片在计算机中本质是以数组形式存储的,其中彩色图片对应 RGB 三通道的数组结构,灰度图则是单通道数组。所以我们用 OpenCV 处理图片,本质上就是对这些数组进行各类运算和操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 2:16:24

I2C中断数据接收缓存管理在TC3的应用

在TC3上构建高效I2C中断接收:从环形缓冲到实战调优 你有没有遇到过这样的场景? 一个温度传感器通过I2C每毫秒上报一次数据,主任务正在处理CAN通信,结果连续丢了几帧采样——排查半天才发现,原来是轮询式读取跟不上节奏…

作者头像 李华
网站建设 2026/4/21 5:34:13

es面试题从零实现:掌握 Elasticsearch 8.x 分片策略

从零拆解 Elasticsearch 8.x 分片机制:不只是面试题,更是生产级设计核心你有没有遇到过这样的场景?线上日志系统突然变慢,Kibana 查询响应时间从几百毫秒飙升到十几秒。排查一圈后发现,不是网络问题、也不是查询语句太…

作者头像 李华
网站建设 2026/4/22 23:06:23

手把手教你读懂ModbusRTU请求与响应报文

手把手教你读懂ModbusRTU请求与响应报文从一个真实调试场景说起上周,我在现场调试一套基于RS-485的温控系统时,遇到了这样一个问题:HMI主站轮询多个温度采集模块,但其中一台设备始终无响应。示波器抓包发现,总线上确实…

作者头像 李华
网站建设 2026/4/17 20:53:40

安静办公室环境下识别准确率达98%以上

Fun-ASR语音识别系统技术解析:安静办公室环境下如何实现98%准确率 在现代办公场景中,会议记录、远程协作和语音输入已成为日常刚需。然而,即便是在看似理想的安静办公室环境中,许多语音转文字工具依然会出现“听不清”“认错人”“…

作者头像 李华
网站建设 2026/4/23 18:47:46

MailerLite功能均衡:中小团队理想选择

Fun-ASR:中小团队私有化语音识别的实用之选 在远程办公常态化、会议录音与课程转写需求激增的今天,越来越多中小企业开始寻求高效、安全且低成本的语音转文字解决方案。公有云 ASR 服务虽然便捷,但数据外传的风险、持续调用的成本以及对网络环…

作者头像 李华
网站建设 2026/4/23 18:47:10

Provide Support实时监控:管理员随时介入

Provide Support 实时监控:管理员随时介入 在远程会议频繁、智能客服普及的今天,语音识别早已不再是“录完再转写”的静态工具。越来越多的业务场景要求系统不仅能快速输出文字,还要允许管理人员在过程中“看得见、插得上、控得住”。比如一场…

作者头像 李华