Python图像处理基础

文章目录

  • 一、图像处理概
  • 二、图像分类
  • 三、openCV图像处理基础
    • 3.1 OpenCV 读取与显示图像
    • 3.2 openCV像素处理
    • 3.3 openCV创建图像、复制图像
    • 3.4 openCV保存图像
    • 3.5 openCV 绘制各种几何图形
  • 四、图像算术与逻辑运算
    • 4.1 图像加法运算
    • 4.2 图像减法运算
    • 4.3 图像与运算
    • 4.4 图像或运算
    • 4.5 图像非运算
    • 4.6 图像异或运算

一、图像处理概

什么是图像处理

数字图像处理(Digital Image Processing)又称为计算机图像处理(Computer Image Processing),旨在将图像信号转换成数字信号并利用计算机对其进行处理的过程。常见的图像处理方法:
图像分类、图像复原、图像重建、图像编码、图像理解、算术处理、几何处理、图像增强、图像识别、图像分割.

二、图像分类

图像都是由像素(pixel)构成的,像素表示为图像中的小方格,这些小方格都有一个明确的位置和被分配的色彩数值,而这些小方格的颜色和位置就决定该图像所呈现出来的样子。像素是图像中的最小单位,每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。

  • 1、二值图像
    二值图像又称为黑白图像,图像中任何一个点非黑即白,要么为白色(像素为 255),要么为黑色(像素为 0)。将灰度图像转换为二值图像的过程,常通过依次遍历判断实现,如果像素大于 127 则设置为 255,否则设置为 0

  • 2、灰度图像
    灰度图像是指每个像素的信息由一个量化的灰度级来描述的图像,没有彩色信息,如图 1-5 所示。改变像素矩阵的 RGB 值可以实现将彩色图转变为灰度图。常见的方法是将灰度划分为 256 种不同的颜色,将原来的RGB(R,G,B)中的 R、G、B 统一替换为Gray,形成新的颜色RGB(Gray,Gray,Gray),即灰度图。将彩色图像转换为灰度图是图像处理的最基本预处理操作。

  • 3、彩色图像
    彩色图像是 RGB 图像,RGB表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道。RGB (Red 红色,Green 绿色,Blue蓝色),是根据人眼识别的颜色而定义的空间,可用于表示大部分颜色,也是图像处理中最基本、最常用、面向硬件的颜色空间,是一种光混合的体系。

三、openCV图像处理基础

3.1 OpenCV 读取与显示图像

主要使用openCV的imread方法读取,imshow方法显示

retval = imread(filename[, flags])

filename 表示需要载入的图片路径名,其支持 Windows 位图、JPEG 文件、PNG 图片、便携文件格式、Sun rasters 光栅文件、TIFF 文件、HDR 文件等。

flags 为 int 类型,表示载入标识,它指定一个加载图像的颜色类型,默认值为 1。其中 cv2.IMREAD_UNCHANGED 表示读入完整图像或图像不可变,包括 alpha通道;cv2.IMREAD_GRAYSCALE表示读入灰度图像;cv2.IMREAD_COLOR 表示读入彩色图像,默认参数,忽略 alpha 通道。

# -*- coding:utf-8 -*-
import cv2

#读取图片
img = cv2.imread("lena.webp")
#显示图像
cv2.imshow("Demo", img)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

3.2 openCV像素处理

OpenCV 中读取图像的像素值可以直接通过遍历图像的位置实现,如果是灰度图像则返回其灰度值,如果是彩色图像则返回蓝色(B)、绿色(G)、红色(G)三个分量值。

其示例如下:

灰度图像:返回值 = 图像[位置参数]
示例:test=img[88,42]

彩色图像:返回值 = 图像[位置元素, 0 | 1 | 2 ]获取 BGR 三个通道像素
示例: blue=img[88,142,0] green=img[88,142,1]
red=img[88,142,2]
当需要修改图像中的像素时,则定位指定像素并直接赋新像素值即可,彩色图像需要依次给三个分量赋值。如下列代码所示。

# -*- coding: utf-8 -*-
# @Time    : 2023/8/17 16:54
# @Author  : admin
# @Email   : 
# @File    : modify_img.py
# @Software: PyCharm

import cv2
#读取图片
img = cv2.imread("lena.webp")
#读取像素
test = img[88,142]
print("读取的像素值:", test)
#修改像素
img[88,142] = [255, 255, 255]
print("修改后的像素值:", test)
img[100:200, 150:250] = [255,255,255]
#分别获取 BGR 通道像素
blue = img[88,142,0]
print("蓝色分量", blue)
green = img[88,142,1]
print("绿色分量", green)
red = img[88,142,2]
print("红色分量", red)
#显示图像
cv2.imshow("Demo", img)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

在图像处理中,NumPy 读取像素调用item()函数实现,修改像素调用itemset()实现

#Numpy 读取像素
print(img.item(78, 100, 0))
print(img.item(78, 100, 1))
print(img.item(78, 100, 2))
#Numpy 修改像素
img.itemset((78, 100, 0), 100)
img.itemset((78, 100, 1), 100)
img.itemset((78, 100, 2), 100)

3.3 openCV创建图像、复制图像

由于在 OpenCV2 中没有 CreateImage 函数,如果需要创建图像,则需要使用 Numpy 库函数实现。如下述代码,调用np.zeros()函数创建空图像,创建的新图像使用 Numpy 数组的属性来表示图像的尺寸和通道信息,其中参数 img.shape 表示原始图像的形状,np.uint8 表示类型。

emptyImage = np.zeros(img.shape, np.uint8)

复制原有图像来获取一幅新图像,可以调用 copy()函数实现。

# -*- coding: utf-8 -*-
# @Time    : 2023/8/19 11:03
# @Author  : admin 
# @Email   : 
# @File    : 
# @Software: PyCharm

import cv2
import numpy as np
#读取图片
img = cv2.imread("lena.webp")
#创建空图像
emptyImage = np.zeros(img.shape, np.uint8)

#复制图像
emptyImage2 = img.copy()
#显示图像
cv2.imshow("Demo1", img)
cv2.imshow("Demo2", emptyImage)
cv2.imshow("Demo3", emptyImage2)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

3.4 openCV保存图像

在 OpenCV 中,输出图像到文件使用的函数为 imwrite(),其函数原型如下:

retval = imwrite(filename, img[, params])

filename :表示要保存的路径及文件名
img :表示图像矩阵
params :表示特定格式保存的参数编码,默认值为空。对于 JPEG 图片,该参数(cv2.IMWRITE_JPEG_QUALITY)表示图像的质量,用 0-100 的整数表示,默认值为 95。对于 PNG 图片,该参数(cv2.IMWRITE_PNG_COMPRESSION)表示的是压缩级别,从 0 到 9,压缩级别越高,图像尺寸越小,默认级别为 3。对于 PPM、PGM 、 PBM 图 片 , 该 参 数 表 示 一 个 二 进 制 格 式 的 标 志(cv2.IMWRITE

你可能感兴趣的:(#,python信号处理,python,图像处理,开发语言)