您的位置:

Python图像处理:cv2.imshow()使用方法详解

一、cv2.imshow()是什么?

1、cv2.imshow()是OpenCV中一种非常重要的图像显示函数,可以呈现图像在窗口中的实时变化。cv2.imshow()函数需要两个参数,一个是窗口名,另一个是待展示的图像。

2、接下来,我们先导入需要使用的库cv2和numpy,并读取一张待处理的图像:

import cv2
import numpy as np

img = cv2.imread('test.jpg')

3、再通过cv2.imshow()函数来打开图像:

cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

4、注意,cv2.imshow()函数中第一个参数表示窗口名称,第二个参数表示图像。cv2.waitKey()参数表示等待时间。如果为0,会无限等待用户的键盘响应。而cv2.destroyAllWindows()则是摧毁所有cv2.imshow()展示的窗口。

二、图像大小调整

1、通过cv2.imshow()函数,我们可以改变图像大小。首先,我们先使用cv2.resize()函数根据需要调整图像大小并展示:

resized = cv2.resize(img, (int(img.shape[1] / 2), int(img.shape[0] / 2)))

cv2.imshow('Resized Image', resized)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、在cv2.resize()函数中,我们需要分别指定目标大小并传入图像数组。其中img.shape返回的是一个元组,第一个位置为高度,第二个位置为图像宽度。上述代码将img调整大小为一半,并将新大小的图像展示出来。

三、图像裁剪

1、接下来我们将图像进行剪裁。我们可以使用numpy的切片操作对图像进行裁剪,也可以使用crop()函数来实现图像裁剪操作。我们来看一下下面的实现方法:

cropped = img[300:900, 600:1200]

cv2.imshow('Cropped Image', cropped)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、在上述代码中,我们使用了裁剪用到的numpy的切片操作。我们将img的300~900行和600~1200列提取出来,称其为cropped大小的图像。最终展示结果如下所示:

四、图像旋转

1、图像旋转是图像处理中经常用到的一种操作。我们可以通过cv2.getRotationMatrix2D()函数来旋转图像。

(h, w) = img.shape[:2]
center = (w / 2, h / 2)
M = cv2.getRotationMatrix2D(center, 45, 1.0)

rotated = cv2.warpAffine(img, M, (w, h))

cv2.imshow('Rotated Image', rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、在上述代码中,我们指定旋转中心为图像中心,旋转角度为45度,缩放比例为1.0。然后,我们使用cv2.warpAffine()函数来进行图像旋转操作。

五、图像翻转

1、图像翻转功能通过函数cv2.flip()实现。这个简单函数中,我们指定翻转方向是垂直或水平的。

flip_vertical = cv2.flip(img, 0)
flip_horizontal = cv2.flip(img, 1)

cv2.imshow('Vertical Flip', flip_vertical)
cv2.imshow('Horizontal Flip', flip_horizontal)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、在上述代码中,我们指定0表示指定垂直反转,1表示水平反转。最终的输出结果如下所示:

六、图像灰度化处理

1、将彩色图像转化为灰度图像的方法是从RGB三个通道中取平均值来实现。可以使用函数cv2.cvtColor()实现该操作。

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv2.imshow('Gray Image', gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、在上述代码中,我们使用cv2.cvtColor()函数将彩色图像转换为灰度图像。在这里,BGR颜色模式在OpenCV中使用。

七、图像二值化处理

1、图像二值化是一种常见的图像处理策略,用于将图像转换为二进制格式。可以通过阈值调整来实现自动化二值化。在这里,我们使用了两种常见的方法实现该操作:

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
threshold_value = 128

(thresh, binary_threshold) = cv2.threshold(gray, threshold_value, 255, cv2.THRESH_BINARY)
(adapt_thresh_mean, adapt_mean) = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

cv2.imshow('Adaptive Thresholding', adapt_thresh_mean)
cv2.imshow('Binary Thresholding', binary_threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、在上述代码中,我们使用函数cv2.threshold()进行二值化的基础操作。其中的第一个参数是原图像,第二个参数是要设定的阈值,第三个参数是用于将超过阈值的像素设定为的新值,第四个参数则是用于指定使用的阈值类型。

3、在本例中,我们用的是cv2.THRESH_BINARY类型的阈值分割,这是最常见的图像处理和计算机视觉分割算法。

八、图像平滑滤波处理

1、平滑处理是一种常见的图像处理操作,用于去除噪声并平缓图像中的轮廓和细节,使得后续的图像处理步骤更容易。可以使用函数cv2.GaussianBlur()和cv2.medianBlur()来实现图像平滑处理操作。

blurred_gaussian = cv2.GaussianBlur(img, (5, 5), 0)
blurred_median = cv2.medianBlur(img, 5)

cv2.imshow('Gaussian Blur', blurred_gaussian)
cv2.imshow('Median Blur', blurred_median)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、在上述代码中,我们使用了cv2.GaussianBlur()函数和cv2.medianBlur()函数分别对图像进行滤波处理。其中,cv2.GaussianBlur()函数可以根据所传递的标准差参数(第三个参数)调整滤波效果,而cv2.medianBlur()函数可以根据所传递的核大小来调整滤波效果。

九、总结

本次用Python演示了cv2.imshow()函数(OpenCV)对于图像进行各种处理的方法,包括调整图像大小、裁剪图像、旋转图像、翻转图像、灰度化处理、二值化处理和平滑滤波处理。这些技术可以被广泛应用于图像处理、计算机视觉和机器视觉领域。