当前位置: 代码网 > it编程>前端脚本>Python > opencv图片处理常见操作方法总结

opencv图片处理常见操作方法总结

2026年01月09日 Python 我要评论
今天学习opencv对图片的常见处理操作,包括:图片的打码,组合,放缩,加法运算,加权运算,以及图片的模糊处理(平滑处理)1、图片打码代码:import cv2import numpy as np#

今天学习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 处理图片,本质上就是对这些数组进行各类运算和操作。

总结

到此这篇关于opencv图片处理常见操作方法的文章就介绍到这了,更多相关opencv图片处理内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com