python opencv 图像处理(四)

简介: python opencv 图像处理(四)

图像算数运算以及修改颜色空间


1.图像加法


图像加法有两种方式,一种是通过 Numpy 直接对两个图像进行相加,另一种是通过 OpenCV 的 add() 函数进行相加。

不管使用哪种方法,相加的两个图像必须具有相同的深度和类型,简单理解就是图像的大小和类型必须一致。


1.1Numpy加法


Numpy 的运算方法是: img = img1 + img2 ,然后再对最终的运算结果取模。


  1. 当最终的像素值 <= 255 时,则运算结果直接为 img1 + img2 。
  2. 当最终的像素值 > 255 时,则运算的结果需对 255进行取模运算。

1.2OpenCV加法


OpenCV 的运算方式是直接调用 add() 函数进行的,这时的运算方式是饱和运算。


  1. 当最终的像素值 <= 255 时,则运算结果直接为 img1 + img2 。
  2. 当最终的像素值 > 255时,这时则是饱和运算,结果固定为 255 。

两种加法方式对应的示例如下:


import cv2 as cv
# 读取图像
img = cv.imread("data.jpg", cv.IMREAD_UNCHANGED)
test = img
# Numpy 加法
result1 = img + test
# OpenCV 加法
result2 = cv.add(img, test)
# 显示图像
cv.imshow("img", img)
cv.imshow("result1", result1)
cv.imshow("result2", result2)
# 等待显示
cv.waitKey()
cv.destroyAllWindows()

20210624170600347.png

网络异常,图片无法展示
|
可以看到,使用 Numpy 取模加法的图片整体更偏蓝色,而使用 OpenCV 饱和运算的加法,整体颜色更偏白色。


图像融合


图像融合其实也是一种图像加法,但是它和图像加法不同的是对图像赋予不同的权重,可以使图像具有融合或者透明的感觉。


图像加法: img = img1 + img2


图像融合: img = img1 * alpha + img2 * beta + gamma


图像融合用到的函数为 addWeighted() 具体如下:


dst = cv.addWeighter(img1, alpha, img2, beta, gamma)
dst = img1 * alpha + img2 * beta + gamma


这里的 alpha 和 beta 都是系数,而 gamma 则是一个亮度调节量,不可省略。


下面这个示例中,有一张地铁的图片,用这张图片和小姐姐做一个图像融合的案例:


    img1 = cv.imread(file, cv.IMREAD_UNCHANGED)
    img1=cv.resize(img1,(1000,1000))
    img2 = cv.imread(file1, cv.IMREAD_UNCHANGED)
    img2=cv.resize(img2,(1000,1000))
    # 图像融合
    img = cv.addWeighted(img1, 0.4, img2, 0.6, 10)
    # 显示图像
    cv.imshow("img1", img1)
    cv.imshow("img2", img2)
    cv.imshow("img", img)
    # 等待显示
    cv.waitKey()
    cv.destroyAllWindows()

注意这里如果二个图像像素不同要更改为同一像素下cv.resize(img,(width,hegiht))

1687217811260.png


1687217824284.png


改变颜色空间


OpenCV 中有超过150种颜色空间转换方法。我们先介绍两种最常用的: BGR <-> 灰度 和 BGR <-> HSV 。


对于改变颜色空间,我们使用 cvtColor(input_image, flag) 函数,其中的 flag 为转换的类型。

一些常见的 flag 值:


# BGR 转 灰度
cv.COLOR_BGR2GRAY
# BGR 转 HSV
cv.COLOR_BGR2HSV
# BGR 转 RGB
cv.COLOR_BGR2RGB
# 灰度 转 BGR
cv.COLOR_GRAY2BGR


我们使用 cvtColor() 这个函数将小姐姐转化成灰度图像,示例如下:


import cv2 as cv
# 读取图像
img = cv.imread("data.jpg", cv.IMREAD_UNCHANGED)
# 图像类型转换
result = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
# 图像展示
cv.imshow("img", img)
cv.imshow("result", result)
# 等待显示
cv.waitKey()
cv.destroyAllWindows()

20210624172143457.png


相关文章
|
6天前
|
机器学习/深度学习 存储 监控
数据分享|Python卷积神经网络CNN身份识别图像处理在疫情防控下口罩识别、人脸识别
数据分享|Python卷积神经网络CNN身份识别图像处理在疫情防控下口罩识别、人脸识别
|
6天前
|
计算机视觉 Python
【Python实战】——Python+Opencv是实现车牌自动识别
【Python实战】——Python+Opencv是实现车牌自动识别
|
6天前
|
算法 计算机视觉
【OpenCV】计算机视觉图像处理基础知识(下)
【OpenCV】计算机视觉图像处理基础知识(下)
|
6天前
|
人工智能 计算机视觉 Python
【OpenCV】计算机视觉图像处理基础知识(上)
【OpenCV】计算机视觉图像处理基础知识(上)
|
6天前
|
算法 Serverless 计算机视觉
使用OpenCV和Python进行极线校正
使用OpenCV和Python进行极线校正
16 1
|
6天前
|
算法 安全 机器人
最新版opencv4.9安装介绍,基本图像处理详解
最新版opencv4.9安装介绍,基本图像处理详解
|
6天前
|
机器学习/深度学习 算法 自动驾驶
opencv python 图片叠加
【4月更文挑战第17天】
|
6天前
|
数据挖掘 计算机视觉 Python
SciPy图像处理技巧:图像增强与特征提取
【4月更文挑战第17天】本文介绍了如何使用SciPy进行图像增强和特征提取。通过调整亮度、对比度和伽马校正实现图像增强,示例代码展示了相关操作。同时,利用Sobel算子进行边缘检测和Laplacian of Gaussian (LoG) 进行角点检测,以提取图像特征。虽然SciPy不是专业的图像处理库,但其数值计算能力在图像分析中仍有一定价值,可与其他图像处理库结合使用。
|
6天前
|
机器学习/深度学习 存储 算法
OpenCV与NumPy:图像处理中的黄金组合
【4月更文挑战第17天】OpenCV和NumPy是Python图像处理的两大利器,互补协作形成黄金组合。OpenCV专注计算机视觉,提供丰富算法,而NumPy擅长数值计算和数组操作。两者无缝对接,共同实现高效、灵活的图像处理任务。通过灰度化、二值化、边缘检测等案例,展示了它们的协同作用。未来,这一组合将在计算机视觉和机器学习领域发挥更大作用,解锁更多图像处理潜力。
|
6天前
|
机器学习/深度学习 算法 Linux
使用OpenCV在Python中进行图像处理
使用OpenCV在Python中进行图像处理