系列文章目录
第一章 python 下 opencv 接口的参数详解及使用(一)
第一章 python 下 opencv 接口的参数详解及使用(二)
第二章 python 下 opencv 的实现图像的基础数学计算
第三章 python 下 opencv 接口实现图像二值化,并小解二值化原理
文章目录
目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、对图像的数学运算
1、图像相加
接口:cv2.add(src1 , src2 , dst = None , mask = None , dtype = None)
作用:用于两张图像或者颜色相机;
参数:
。src1 :需要相加的第一幅图象文件;
。src2 :需要相加的第二幅图像文件,鉴于仅用于两图像的相加,所以需要通道和宽高相同;
。dst :两图相加后的结果图文件;
。mask :掩码(mask),可有可无
。dtype :相加结果图像的景深,此参数可有可无;
实现代码及成像效果:
import cv2
filename_1 = "image_1.bmp"
filename_2 = "image_2.bmp"
# 读入图像数据
image_1 = cv2.imread(filename = filename_1 ,flags= 1)
image_2 = cv2.imread(filename = filename_2 ,flags= 1)
image = cv2.add(src1 = image_1, src2 = image_2 )
# 对图像进行显示
cv2.imshow(winname = "image_1" , mat = image_1)
cv2.imshow(winname = "image_2" , mat = image_2)
cv2.imshow(winname = "image_show" , mat = image)
cv2.waitKey(0)
cv2.destroyAllWindows()
实现效果:
2、图像相加融合
接口:cv2.addWeighted(src1 , alpha , src2 , beta , gamma , dst = None , dtype = None)
作用:用于两张图像相加融合;
参数:
。src1 :需要相加的第一幅图象文件;
。alpha :第一个图文件的权重;
。src2 :需要相加的第二幅图像文件,鉴于仅用于两图像的相加,所以需要通道和宽高相同;
。beta:第二个图文件的权重;
。gamma :两张图相加后要增加的值,不要太大,不然图片一片白。总和等于255以上就是纯白色了;
。dst :两图相加后的结果图文件;
。dtype :相加结果图像的景深,此参数可有可无;
实现原理:
该接口主要实现以下公式内容:
公式中: 代表第一张图像; 代表第二张图像;其中 和 代表权重值,其中 代表需要再增加的值
实现代码及成像效果:
import cv2
filename_1 = "image_1.bmp"
filename_2 = "image_2.bmp"
# 读入图像数据
image_1 = cv2.imread(filename = filename_1 ,flags= 1)
image_2 = cv2.imread(filename = filename_2 ,flags= 1)
image = cv2.addWeighted(src1 = image_1, alpha = 0.3 , src2 = image_2 , beta = 0.4 , gamma = 0.5)
# 对图像进行显示
cv2.imshow(winname = "image_1" , mat = image_1)
cv2.imshow(winname = "image_2" , mat = image_2)
cv2.imshow(winname = "image_show" , mat = image)
cv2.waitKey(0)
cv2.destroyAllWindows()
实现效果:
3、图像按比例相加
接口:cv2.scaleAdd(src1 , alpha , src2 , dst = None)
作用:将第一张图像按照比例相加到第二张图像中;
参数:
。src1 :需要相加的第一幅图象文件;
。alpha :第一个图文件的比例系数;
。src2 :需要相加的第二幅图像文件,鉴于仅用于两图像的相加,所以需要通道和宽高相同;
。dst :结果图像;
实现原理:
该接口主要实现以下公式内容:
公式中: 代表第一张图像; 代表第二张图像;其中 代表第一张图 src1 的权重值;
实现代码及成像效果:
import cv2 as cv
filename_1 = "image_1.bmp"
filename_2 = "image_2.bmp"
# 读入图像数据
image_1 = cv.imread(filename = filename_1 ,flags= 1)
image_2 = cv.imread(filename = filename_2 ,flags= 1)
image = cv.scaleAdd(src1 = image_1 , src2 = image_2 , alpha = 0.5)
# 对图像进行显示
cv.imshow(winname = "image_1" , mat = image_1)
cv.imshow(winname = "image_2" , mat = image_2)
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()
实现效果:
4、图像相减
接口:cv2.subtract(src1 , src2 , dst = None , mask , dtype = -1)
作用:将两张图像进行相减;
参数:
。src1 :需要相减的第一幅图象文件;
。src2 :需要相减的第二幅图像文件,鉴于仅用于两图像的相减,所以需要通道和宽高相同;
。dst :结果图像;
。mask :掩膜
。dtype :输出数组的可选深度
实现原理:
将两张图像逐像素点相减;
实现代码及成像效果:
import cv2 as cv
filename_1 = "1.bmp"
filename_2 = "2.bmp"
# 读入图像数据
image_1 = cv.imread(filename = filename_1 ,flags= 1)
# 对图像进行缩放操作
image_1 = cv.resize(src = image_1 , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
image_2 = cv.imread(filename = filename_2 ,flags= 1)
# 对图像进行缩放操作
image_2 = cv.resize(src = image_2 , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
image = cv.subtract(src1 = image_1 , src2 = image_2 )
# 对图像进行缩放操作
image = cv.resize(src = image , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
# 对图像进行显示
cv.imshow(winname = "image_1" , mat = image_1)
cv.imshow(winname = "image_2" , mat = image_2)
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()
实现效果:
5、图像比例相乘
接口:cv2.multiply(src1 , src2 , scale)
作用:将两张图像进行逐像素点相乘;
参数:
。src1 :需要相乘的第一幅图象文件;
。src2 :需要相乘的第二幅图像文件,鉴于仅用于两图像的相乘,所以需要通道和宽高相同;
。scale:相乘的比例因子
实现原理:
将两张图像逐像素点相乘;
实现代码及成像效果:
import cv2 as cv
filename_1 = "image_1.bmp"
filename_2 = "image_2.bmp"
# 读入图像数据
image_1 = cv.imread(filename = filename_1 ,flags= 1)
# 对图像进行缩放操作
image_1 = cv.resize(src = image_1 , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
image_2 = cv.imread(filename = filename_2 ,flags= 1)
# 对图像进行缩放操作
image_2 = cv.resize(src = image_2 , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
image = cv.multiply(src1 = image_1 , src2 = image_2 , scale = 0.5)
# 对图像进行缩放操作
image = cv.resize(src = image , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
# 对图像进行显示
cv.imshow(winname = "image_1" , mat = image_1)
cv.imshow(winname = "image_2" , mat = image_2)
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()
实现效果:
6、图像比例因子相除
接口:cv2.divide(scale , src1, src2 , dst = None , dtype)
作用:将两张图像取除法,并以相关乘数因子相乘;
参数:
。src1 :需要逐像素点相除的第一幅图像;
。src2 :需要逐像素点相除的第二幅图像;
。scale :需要使用的比例系数;
。dst :结果图像;
。dtype :输出图像的位深,-1表示与 src2 相同;
实现原理:
(1)该接口主要实现以下公式内容:
公式中:式中 src1 表示需要逐像素点被除的图像1 , src2 表示需要逐像素点被除的图像2 , scale 表示乘数因子
实现代码及成像效果:
import cv2 as cv
filename_1 = "divide_1.bmp"
filename_2 = "divide_2.bmp"
# 读入图像数据
image_1 = cv.imread(filename = filename_1 ,flags= 1)
# 对图像进行缩放操作
image_1 = cv.resize(src = image_1 , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
image_2 = cv.imread(filename = filename_2 ,flags= 1)
# 对图像进行缩放操作
image_2 = cv.resize(src = image_2 , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
image = cv.divide(scale = 50 , src1 = image_1 , src2 = image_2 , dtype = -1)
# 对图像进行缩放操作
image = cv.resize(src = image , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
# 对图像进行显示
cv.imshow(winname = "image_1" , mat = image_1)
cv.imshow(winname = "image_2" , mat = image_2)
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()
实现效果:
(2)该接口主要实现以下公式内容:
公式中: src2 表示需要逐像素点取倒数的图像2 , scale 表示乘数因子
实现代码及成像效果:
import cv2 as cv
filename_1 = "divide_1.bmp"
# 读入图像数据
image_1 = cv.imread(filename = filename_1 ,flags= 1)
# 对图像进行缩放操作
image_1 = cv.resize(src = image_1 , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
image = cv.divide(scale = 50 , src2 = image_1 , dtype = -1)
# 对图像进行缩放操作
image = cv.resize(src = image , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
# 对图像进行显示
cv.imshow(winname = "image_1" , mat = image_1)
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()
实现效果:
7、图像的幂次运算
接口:cv2.pow(src , power , dst)
作用:将两张图像进行逐像素点相乘;
参数:
。src :需要进行幂次运算的图象文件;
。power:幂次系数;
。dst:结果图像
实现原理:
将图像逐像素点幂次计算;
实现代码及成像效果:
import cv2 as cv
filename_1 = "divide_1.bmp"
# 读入图像数据
image_1 = cv.imread(filename = filename_1 ,flags= -1)
# 对图像进行缩放操作
image_1 = cv.resize(src = image_1 , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
image = cv.pow(src = image_1 , power = 2)
# 对图像进行缩放操作
image = cv.resize(src = image , dsize = (500 , 500) , interpolation = cv.INTER_NEAREST)
# 对图像进行显示
cv.imshow(winname = "image_1" , mat = image_1)
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()
实现效果:
二、对图像的逻辑运算
1、对图像“与”操作
接口:cv2.bitwise_and(src1 , src2 , dst , mask)
作用:将两张图像进行逐像素点相与;
参数:
。src1 :需要逐像素点相与的第一幅图像;
。src2 :需要逐像素点相与的第二幅图像;
。dst :结果图像;
。dtype :掩码;
实现原理:
将两张图像逐像素点相与计算;
实现代码及成像效果:
import cv2 as cv
filename_1 = "divide_1.bmp"
filename_2 = "divide_2.bmp"
# 读入图像数据
image_1 = cv.imread(filename = filename_1 ,flags= 1)
# 对图像进行缩放操作
image_1 = cv.resize(src = image_1 , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
image_2 = cv.imread(filename = filename_2 ,flags= 1)
# 对图像进行缩放操作
image_2 = cv.resize(src = image_2 , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
image = cv.bitwise_and(src1 = image_1 , src2 = image_2)
# 对图像进行缩放操作
image = cv.resize(src = image , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
# 对图像进行显示
cv.imshow(winname = "image_1" , mat = image_1)
cv.imshow(winname = "image_2" , mat = image_2)
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()
实现效果:
2、对图像“或”操作
接口:cv2.bitwise_or(src1 , src2 , dst , mask)
作用:将两张图像进行逐像素点相与;
参数:
。src1 :需要逐像素点或计算的第一幅图像;
。src2 :需要逐像素点或计算的第二幅图像;
。dst :结果图像;
。dtype :掩码;
实现原理:
将两张图像逐像素点或计算;
实现代码及成像效果:
import cv2 as cv
filename_1 = "divide_1.bmp"
filename_2 = "divide_2.bmp"
# 读入图像数据
image_1 = cv.imread(filename = filename_1 ,flags= 1)
# 对图像进行缩放操作
image_1 = cv.resize(src = image_1 , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
image_2 = cv.imread(filename = filename_2 ,flags= 1)
# 对图像进行缩放操作
image_2 = cv.resize(src = image_2 , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
image = cv.bitwise_or(src1 = image_1 , src2 = image_2)
# 对图像进行缩放操作
image = cv.resize(src = image , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
# 对图像进行显示
cv.imshow(winname = "image_1" , mat = image_1)
cv.imshow(winname = "image_2" , mat = image_2)
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()
实现效果:
3、对图像“异或”操作
接口:cv2.bitwise_xor(src1 , src2 , dst , mask)
作用:将两张图像进行逐像素点相与;
参数:
。src1 :需要逐像素点异或计算的第一幅图像;
。src2 :需要逐像素点异或计算的第二幅图像;
。dst :结果图像;
。dtype :掩码;
实现原理:
将两张图像逐像素点异或计算;
实现代码及成像效果:
import cv2 as cv
filename_1 = "divide_1.bmp"
filename_2 = "divide_2.bmp"
# 读入图像数据
image_1 = cv.imread(filename = filename_1 ,flags= 1)
# 对图像进行缩放操作
image_1 = cv.resize(src = image_1 , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
image_2 = cv.imread(filename = filename_2 ,flags= 1)
# 对图像进行缩放操作
image_2 = cv.resize(src = image_2 , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
image = cv.bitwise_xor(src1 = image_1 , src2 = image_2)
# 对图像进行缩放操作
image = cv.resize(src = image , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
# 对图像进行显示
cv.imshow(winname = "image_1" , mat = image_1)
cv.imshow(winname = "image_2" , mat = image_2)
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()
实现效果:
4、对图像“非”操作
接口:cv2.bitwise_not(src , dst , mask)
作用:将图像进行逐像素点非操作;
参数:
。src :需要逐像素点非计算的图像;
。dst :结果图像;
。dtype :掩码;
实现原理:
将图像逐像素点进行非计算;
实现代码及成像效果:
import cv2 as cv
filename_1 = "divide_1.bmp"
# 读入图像数据
image_1 = cv.imread(filename = filename_1 ,flags= 1)
# 对图像进行缩放操作
image_1 = cv.resize(src = image_1 , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
image = cv.bitwise_not(src = image_1)
# 对图像进行缩放操作
image = cv.resize(src = image , dsize = (800 , 600) , interpolation = cv.INTER_NEAREST)
# 对图像进行显示
cv.imshow(winname = "image_1" , mat = image_1)
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()
实现效果:
总结
在本节中对常见的 opencv 图像处理库中的基础数学计算的接口进行了相关介绍和 python+opencv 的接口实现以及图像结果的显示,有哪些不足还请大家指出。