零基础入门Python-OpenCV:像素处理、感兴味区域处理、通道处理
作者头像
  • 洪雅丹
  • 2020-05-12 14:10:32 11

图像处理基础

在接下来的内容中,我们将详细介绍图像处理的基本概念和相关操作。这包括图像的基本表示方法、像素处理、感兴趣区域(ROI)处理以及通道处理等内容。这些知识对于理解和使用OpenCV库非常有帮助。

1. 图像的基本表示方法

图像可以用多种方式进行表示,其中最常见的三种类型是二值图像、灰度图像和彩色图像。

1.1 二值图像

二值图像是最简单的图像类型,只有黑白两种颜色。通常,黑色用0表示,白色用1表示。

1.2 灰度图像

灰度图像是对二值图像的扩展,包含256个灰度级别,从0到255。0代表纯黑,255代表纯白。

1.3 彩色图像

彩色图像是最复杂的图像类型,可以表示更多细节。最常见的彩色图像格式是RGB图像,由红、绿、蓝三个通道组成,每个通道的值范围在0到255之间。

2. 像素处理

像素处理是指对图像中的单个像素进行操作,包括读取、修改和显示。

2.1 二值图像和灰度图像

我们可以读取一个灰度图像,并对其进行像素操作。例如,将特定区域的像素值设为白色。

```python import cv2

img = cv2.imread("lena.bmp", 0) # 读取灰度图像

cv2.imshow("原图", img)

for i in range(10, 100): for j in range(80, 100): img[i, j] = 255 # 将指定区域的像素值设为255(白色)

cv2.imshow("修改后", img) cv2.waitKey() cv2.destroyAllWindows() ```

2.2 彩色图像

彩色图像的像素处理更为复杂,因为它们包含多个通道。

案例一:创建彩色图像

```python import numpy as np import cv2

img = np.zeros((300, 300, 3), dtype=np.uint8) # 创建一个300x300的RGB图像

img[:, 0:100, 0] = 255 # 红色通道 img[:, 100:200, 1] = 255 # 绿色通道 img[:, 200:300, 2] = 255 # 蓝色通道

cv2.imshow("img", img) cv2.waitKey() cv2.destroyAllWindows() ```

案例二:修改彩色图像

```python import cv2

img = cv2.imread("lenacolor.png")

cv2.imshow("原图", img)

print("访问img[0,0]=", img[0, 0]) print("访问img[0,0,0]=", img[0, 0, 0]) print("访问img[0,0,1]=", img[0, 0, 1]) print("访问img[0,0,2]=", img[0, 0, 2]) print("访问img[50,0]=", img[50, 0]) print("访问img[100,0]=", img[100, 0])

区域1

for i in range(0, 50): for j in range(0, 100): for k in range(0, 3): img[i, j, k] = 255 # 将指定区域的像素值设为255(白色)

区域2

for i in range(50, 100): for j in range(0, 100): img[i, j] = [128, 128, 128] # 将指定区域的像素值设为灰色

区域3

for i in range(100, 150): for j in range(0, 100): img[i, j] = 0 # 将指定区域的像素值设为黑色

cv2.imshow("修改后", img) print("修改后img[0,0]=", img[0, 0]) print("修改后img[0,0,0]=", img[0, 0, 0]) print("修改后img[0,0,1]=", img[0, 0, 1]) print("修改后img[0,0,2]=", img[0, 0, 2]) print("修改后img[50,0]=", img[50, 0]) print("修改后img[100,0]=", img[100, 0])

cv2.waitKey() cv2.destroyAllWindows() ```

3. 感兴趣区域(ROI)处理

在图像处理过程中,有时需要关注图像的某个特定区域。这个区域称为感兴趣区域(ROI)。

案例一:获取图像的脸部信息

```python import cv2

img = cv2.imread("lenacolor.png") # 读取彩色图像

face = img[220:400, 150:350] # 获取脸部区域

cv2.imshow("原始图像", img) cv2.imshow("脸部", face) cv2.waitKey() cv2.destroyAllWindows() ```

案例二:对脸部区域进行马赛克处理

```python import cv2 import numpy as np

img = cv2.imread("lenacolor.png") # 读取彩色图像

cv2.imshow("原始图像", img)

face = np.random.randint(0, 256, (180, 100, 3)) # 生成随机噪声

img[220:400, 250:350] = face # 对脸部区域进行马赛克处理

cv2.imshow("处理后", img) cv2.waitKey() cv2.destroyAllWindows() ```

4. 通道处理

图像的通道处理涉及对图像的不同颜色通道进行操作,如分离和合并通道。

4.1 通道分离

```python import cv2

img = cv2.imread("lenacolor.png")

cv2.imshow("原图", img)

b = img[:, :, 0] g = img[:, :, 1] r = img[:, :, 2]

cv2.imshow("B通道", b) cv2.imshow("G通道", g) cv2.imshow("R通道", r)

img[:, :, 0] = 0 # 将B通道设为0 cv2.imshow("B通道设为0", img)

img[:, :, 1] = 0 # 将G通道设为0 cv2.imshow("B和G通道设为0", img)

cv2.waitKey() cv2.destroyAllWindows() ```

4.2 使用cv2.split函数分离通道

```python import cv2

img = cv2.imread("lenacolor.png")

b, g, r = cv2.split(img)

cv2.imshow("B通道", b) cv2.imshow("G通道", g) cv2.imshow("R通道", r)

cv2.waitKey() cv2.destroyAllWindows() ```

4.3 通道合并

```python import cv2

img = cv2.imread("lenacolor.png")

b, g, r = cv2.split(img)

bgr = cv2.merge([b, g, r]) # 合并为BGR图像 rgb = cv2.merge([r, g, b]) # 合并为RGB图像

cv2.imshow("原图", img) cv2.imshow("BGR图像", bgr) cv2.imshow("RGB图像", rgb)

cv2.waitKey() cv2.destroyAllWindows() ```

下一步学习内容

接下来,我们将继续深入学习OpenCV库的其他功能,包括图像运算、几何变换、阈值处理、图像平滑等。这些内容将进一步提升你对图像处理的理解和应用能力。

  1. 图像运算:包括图像加法、图像加权和、按位逻辑运算等。
  2. 几何变换:如缩放、翻转、放射变换、透视变换等。
  3. 阈值处理:包括基本阈值处理、自适应阈值处理和Otsu阈值处理。
  4. 图像平滑:如均值滤波、方框滤波、高斯滤波、中值滤波、双边滤波等。

希望这些内容对你有所帮助!

    本文来源:图灵汇
责任编辑: : 洪雅丹
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
处理兴味像素入门通道区域基础PythonOpenCV
    下一篇