一:显示
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_BINARY
、cv.THRESH_BINARY_INV
、cv.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掩模
imshape = image.shape
:这行代码获取输入图像的形状(尺寸),并将其存储在imshape
变量中。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]),另外两个顶点则位于图像的中心线和顶部三分之二处。mask = np.zeros_like(image)
:这行代码创建了一个与输入图像尺寸相同但所有值都为0的数组,用作掩膜。if len(image.shape) > 2:
:这行代码检查输入图像是否为彩色图像(即,图像的维度是否大于2)。如果是彩色图像,它将获取图像的颜色通道数,否则,它将设置忽略掩码颜色为255(可能是灰度图像)。ignore_mask_color = (255,) * channel_count
:如果输入图像是彩色图像,这行代码将设置忽略掩码颜色为白色。白色在RGB颜色空间中表示为(255, 255, 255)。cv.fillPoly(mask, vertices, ignore_mask_color)
:这行代码使用OpenCV库的fillPoly
函数将计算出的四边形区域填充到掩膜数组中。填充的颜色是之前设定的ignore_mask_color
。masked_image = cv.bitwise_and(image, mask)
:这行代码使用OpenCV库的bitwise_and
函数将原始图像与掩膜进行按位与操作。结果是一个只包含选定区域(ROI)的图像。cv.imshow('ROI image', masked_image)
和cv.moveWindow('ROI image', 390, 300)
:这两行代码使用OpenCV库的imshow
函数显示提取的ROI图像,并使用moveWindow
函数移动显示窗口到屏幕上的特定位置。return masked_image
:最后,该函数返回提取的ROI图像。
图像融合:
cv.addWeighted(initial_img, alpha, img, beta, lambda_)
initial_img
:初始图像,即融合前的第一幅图像。alpha
:第一个图像的权重。img
:第二个图像。beta
:第二个图像的权重。lambda_
:加权系数。