分享

在 Google Colab 中使用 OpenCV 进行图像处理简介

 小白学视觉 2021-09-07

重磅干货,第一时间送达

在这篇文章中,我们将实现如何使用 OpenCV 在 google colaboratory 中进行图像处理。为此,我们应该了解一些 Python 基础知识,下面给出的步骤将帮助我们在 Google Colab 中使用 OpenCV 进行图像处理,这有助于机器学习人工智能。

图像处理的6个步骤:

步骤 1:加载依赖项

我们将加载一些必需的库,例如:Numpy, pandas, cv2, skimage, PIL and Matplotlib。在 Google colab 上加载依赖项:

import numpy as npimport pandas as pdimport cv2 as cvfrom google.colab.patches import cv2_imshow from skimage import iofrom PIL import Imageimport matplotlib.pylab as plt

第 2 步:从 URL 读取图像

在这一步中,我们将从 URL 中读取图像,并在 google colab 中使用 OpenCV 显示它们,我们将使用以下代码来显示图像。

让我们在 Google colab 上尝试一下,这些是图像的 URL。

urls = ["https://iiif.lib./iiif/0052574/full/800,/0/default.jpg","https://iiif.lib./iiif/0016007/full/800,/0/default.jpg","https:///800/571"]for url in urls:image = io.imread(url)image_2 = cv.cvtColor(image, cv.COLOR_BGR2RGB)final_frame = cv.hconcat((image, image_2))cv2_imshow(final_frame)print('\n')

运行上面给出的代码后,上面显示的图像将作为结果显示。请注意读取 RGB 和 BGR 格式的图像时的区别,OpenCV 的默认输入颜色通道采用 BGR 格式。

第 3 步:图像轮廓和直方图

我们将使用以下代码:

print(image.dtype)print(image.shape[0])print(image.shape[1])print(image.shape[2])

然后检查图像矩阵数据类型,图像的高度,图像的宽度,图像的通道数。现在让我们显示彩色图像中所有像素的直方图。

plt.hist(image.ravel(),bins = 256, range = [0,256])plt.show()

显示R、G、B 通道的直方图。我们可以观察到,绿色通道在 255 中有很多像素,这表示图像中的白色块。

color = ('b','g','r')for i, col in enumerate(color):histr = cv.calcHist([image],[i],None,[256],[0,256])plt.plot(histr,color = col)plt.xlim([0,256])plt.show()

现在让我们尝试制作灰度图像,在这里,我们成功地得到了一只猫的灰色图像,绘制灰度图像的直方图。

gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)cv2_imshow(gray_image)

我们可以观察到图像直方图的频率降低了彩色图像直方图的 1/3。

plt.hist(gray_image.ravel(),bins = 256, range = [0, 256])plt.show()

第 4 步:灰度变换和直方图均衡化

灰度变换提供了一些对灰度图像进行数学变换的示例。

im2 = 255 - gray_imagecv2_imshow(im2)

这是灰度图像的逆运算,我们可以看到明亮的像素变暗,而暗的像素变亮。

im3 = (100.0/255)*gray_image + 100cv2_imshow(im3)

在添加常量后,对图像进行另一个变换。所有的像素都变得更亮,并且产生了图像的模糊效果。在这一步骤之后,灰度图像的亮度级别会降低。

第 5 步:灰度图像的傅立叶变换

傅里叶变换用于找到图像的频域,让我们继续使用一段代码,它通过内核大小为 10 的高斯滤波器对灰度图像进行模糊,并将图像变换到频域。

imBlur = cv.blur(gray_image,(5,5))f = np.fft.fft2(imBlur)fshift = np.fft.fftshift(f)magnitude_spectrum = 30*np.log(np.abs(fshift))plt.subplot(121),plt.imshow(imBlur, cmap = 'gray')plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray')plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])plt.show()

步骤 6:通过 FFT 中的高通滤波查找边缘

最后一步演示如何使用高通滤波器去除低频分量,从而生成包含边缘的锐化图像。

rows, cols = imBlur.shapecrow, ccol = round(rows/2) , round(cols/2)fshift[crow-10:crow+10, ccol-10:ccol+10] = 0f_ishift = np.fft.ifftshift(fshift)img_back = np.fft.ifft2(f_ishift)img_back = np.abs(img_back)plt.figure(figsize=([20, 20]))plt.subplot(131),plt.imshow(imBlur, cmap = 'gray')plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(132),plt.imshow(img_back, cmap = 'gray')plt.title('Image after HPF'), plt.xticks([]), plt.yticks([])plt.subplot(133),plt.imshow(img_back)plt.title('Result in JET'), plt.xticks([]), plt.yticks([])plt.show()

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多