图像处理代码分析记录

本文介绍了如何在Python中使用OpenCV库进行函数定义、创建窗口和滑动条,以及进行图像处理操作,如灰度化、二值化、边缘检测、高斯滤波和图像融合,还涉及了MASK掩模的使用。
摘要由CSDN通过智能技术生成
一:显示
def everything(x):
    pass
Python函数定义,函数名为everythong,它接受一个参数x,但函数体中没有执行任何操作,只有一个pass语句,表示该函数不执行任何操作。当调用这个函数时,它只是简单地返回,不会对输入的参数进行任何处理或产生任何效果。
cv.namedWindow('adjust')
cv.namedWindow是OpenCV库中的一个函数,用于创建一个具有合适名称和大小的窗口,以在屏幕上显示图像和视频。在这个函数中,'adjust'是窗口的名称。
cv.createTrackbar('binary_value', 'adjust', 90, 255, nothing)
cv.createTrackbar()函数用于创建一个滑动条,这个滑动条可以在图像窗口(在此例中为'adjust')内拖动。这个滑动条可以用来控制一些参数,比如调整阈值等。
以下是对你提供的代码的详细解释:
'binary_value'是滑动条的名称;
'adjust'是窗口的名称,和先前创建的窗口同名;
90是滑动条的初始值;
255是滑动条的最大值,这意味着滑动条的值必须在0(包含)和255(包含)之间;
'nothing'是一个函数,当滑动条的值改变时,它不会被调用。这就是默认情况——当滑动条的值改变时,什么都不会发生。

 如果你想在每次滑动条值改变时将图像转换为二值图像则如下

def nothing(x):  
    img = cv.imread('image.png')  # 读取图像  
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)  # 转换为灰度图像  
    _, binary = cv.threshold(gray, x, 255, cv.THRESH_BINARY)  # 转换为二值图像  
    cv.imshow('binary', binary)  # 显示二值图像  
  cv.createTrackbar('binary_value', 'adjust', 90, 255, nothing)

二:处理

灰度化图像转化:

gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)

二值化图像:

ret, binary = cv.threshold(img, binary_value, 255,cv.THRESH_BINARY_INV) 

注:cv.threshold(src, thresh, maxval, type)

  • src:输入图像,通常为灰度图像。
  • thresh:阈值,用于比较输入图像的像素值。
  • maxval:当像素值超过(或小于,取决于阈值类型)阈值时要赋予的值。
  • type:阈值类型,决定如何应用阈值化操作。常见的类型包括 cv.THRESH_BINARYcv.THRESH_BINARY_INVcv.THRESH_TRUNC 等

边缘检测:

cannyedge = cv.Canny(image, low_threshold, low_threshold * 3)

处理过程的第一阈值,第二个阈值

高斯滤波:

kernel_size = 3  # 高斯滤波器大小size,奇数
blur = cv.GaussianBlur(image, (kernel_size, kernel_size), 0)
  • image:这是你需要进行模糊处理的图像。它应该是一个 Numpy 数组。
  • (kernel_size, kernel_size):这是一个元组,表示高斯核的大小。核的大小必须是奇数,如 (3, 3), (5, 5), (7, 7) 等。核的大小会影响到模糊的程度和图像的平滑度。核越大,模糊效果越强,平滑度越高,但同时也会丢失更多的细节。
  • 0:这是高斯核的标准差。标准差越大,模糊效果越强。如果你想让函数自己计算标准差,可以将这个值设为负数,如 cv.GaussianBlur(image, (kernel_size, kernel_size), -1)。在这种情况下,函数会根据核的大小自动计算标准差。

MASK掩模

  1. imshape = image.shape:这行代码获取输入图像的形状(尺寸),并将其存储在imshape变量中。
  2. vertices = np.array([[(0, imshape[0]), (imshape[1], imshape[0]),(imshape[1], int(imshape[0] * 2 / 3)), (0, int(imshape[0] * 2 / 3))]],dtype=np.int32):这行代码创建了一个表示四边形区域顶点的数组。这些顶点是根据图像的尺寸计算的,四边形的左上角位于(0, imshape[0]),右下角位于(imshape[1], imshape[0]),另外两个顶点则位于图像的中心线和顶部三分之二处。
  3. mask = np.zeros_like(image):这行代码创建了一个与输入图像尺寸相同但所有值都为0的数组,用作掩膜。
  4. if len(image.shape) > 2::这行代码检查输入图像是否为彩色图像(即,图像的维度是否大于2)。如果是彩色图像,它将获取图像的颜色通道数,否则,它将设置忽略掩码颜色为255(可能是灰度图像)。
  5. ignore_mask_color = (255,) * channel_count:如果输入图像是彩色图像,这行代码将设置忽略掩码颜色为白色。白色在RGB颜色空间中表示为(255, 255, 255)。
  6. cv.fillPoly(mask, vertices, ignore_mask_color):这行代码使用OpenCV库的fillPoly函数将计算出的四边形区域填充到掩膜数组中。填充的颜色是之前设定的ignore_mask_color
  7. masked_image = cv.bitwise_and(image, mask):这行代码使用OpenCV库的bitwise_and函数将原始图像与掩膜进行按位与操作。结果是一个只包含选定区域(ROI)的图像。
  8. cv.imshow('ROI image', masked_image) 和 cv.moveWindow('ROI image', 390, 300):这两行代码使用OpenCV库的imshow函数显示提取的ROI图像,并使用moveWindow函数移动显示窗口到屏幕上的特定位置。
  9. return masked_image:最后,该函数返回提取的ROI图像。

图像融合:

 cv.addWeighted(initial_img, alpha, img, beta, lambda_)
  • initial_img:初始图像,即融合前的第一幅图像。
  • alpha:第一个图像的权重。
  • img:第二个图像。
  • beta:第二个图像的权重。
  • lambda_:加权系数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllabtYOU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值