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

小白学视觉

共 3659字,需浏览 8分钟

 · 2021-09-08

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

在这篇文章中,我们将实现如何使用 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.ncsu.edu/iiif/0052574/full/800,/0/default.jpg","https://iiif.lib.ncsu.edu/iiif/0016007/full/800,/0/default.jpg","https://placekitten.com/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()



好消息,小白学视觉团队的知识星球开通啦,为了感谢大家的支持与厚爱,团队决定将价值149元的知识星球现时免费加入。各位小伙伴们要抓住机会哦!


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 40
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报