图像处理技术研究与实现——python+opencv

背景介绍

21世纪是一个充满信息的时代,图像作为人类感知世界的视觉基础,是人类获取信息、表达信息和传递信息的重要手段。处理图像,可以帮助我们更好地获取信息,也可以使我们更客观、准确地认识世界。

图像处理作为计算机视觉领域的重要分支,在各个行业中扮演着越来越重要的角色。从医疗诊断、自动驾驶、安防监控到人工智能领域的图像识别,图像处理无处不在。

OpenCV

  • OpenCV是一个开源的计算机视觉库,它包含了丰富的图像处理和计算机视觉功能,支持多种操作系统(Linux、Windows、Mac OS)
  • OpenCV用C++语言编写,它的主要接口也是C++语言。该库也有大量的Python, Java and MATLAB的接口
  • 具有通用的图象/视频载入、保存和获取模块
  • 具有基本的数字图象处理能力,如可进行滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图和图象金字塔等操作

本文所有代码都是基于Pyhon的OpenCV库,conda install opencv

有时候安装opencv得使用conda install -c conda-forge opencv 这个命令
不然可能会因为和python版本不兼容问题导致导入不了cv2

图像色彩转换

灰度图像生成
  • 计算机中,图像由一个个像素组成
  • 彩色图像有R,G,B三个颜色通道叠加而成
  • 灰度图像只有一个颜色通道,显示范围从纯黑到纯白,0-255(8位灰度图,28)

如图所示,这是两张10×10像素的图

图像处理技术研究与实现——python+opencv_第1张图片

图像灰度化就是使彩色图像的R、G、B三个分量相等的过程,opencv内置了转换函数

# 将彩色图像转为灰度图
import cv2
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

image=cv2.imread('lena.png')
gray_image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# OpenCV读取的图像默认是BGR格式(蓝、绿、红)
# 而matplotlib的imshow方法预期的是RGB格式

image_rgb=image[:,:,::-1]

fig, axs = plt.subplots(1, 2, figsize=(10, 5))
# axs[0].imshow(cv2.cvtColor(image,cv2.COLOR_BGR2RGB)) #所以这里需要将BGR转为RGB格式
axs[0].imshow(image_rgb) #这样也能转换
axs[0].set_title('Original Image')
axs[0].axis('off')

axs[1].imshow(gray_image,cmap='gray')  # 灰度图需要指定颜色映射
axs[1].set_title('Grayscale Image')
axs[1].axis('off')

plt.tight_layout() #自动调整子图间距
plt.show()

图像二值化

图像二值化即将图像转换为只有黑白两种颜色,设定一个阈值,灰度值超过这个阈值的转换为白色,低于阈值的转为黑色

#生成黑白颜色图
import cv2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False

image=cv2.imread("lena_gray.png")

"""固定阈值二值化"""
_, binary = cv2.threshold(image, 125, 255, cv2.THRESH_BINARY)

thresh=125
image[image>thresh]=255
image[image<=thresh]=0

plt.figure(figsize=(10, 5))

# 原始灰度图
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('原始灰度图')
plt.axis('off')

plt.subplot(1,2,2)
plt.imshow(binary)
plt.title('黑白图')
plt.axis('off')

plt.tight_layout()
plt.show()

你可能感兴趣的:(图像处理,python,opencv)