算术运算–加减乘除
#算数运算(加、减、乘、除)、均值、均方差
def add_demo(m1,m2):
dst=cv.add(m1,m2)
cv.imshow("add_demo",dst)
def subtract_demo(m1,m2):
dst=cv.subtract(m1,m2)
cv.imshow("subtract_demo",dst)
def multiply_demo(m1,m2):
dst=cv.multiply(m1,m2)
cv.imshow("multiply_demo",dst)
def divide_demo(m1,m2):
dst=cv.divide(m1,m2)
cv.imshow("divide_demo",dst)
均值、均方差
def others(m1,m2):
#标准差越大说明色差越大
M1,dev1=cv.meanStdDev(m1)
M2 ,dev2= cv.meanStdDev(m2)
#均值
print(M1)
print(M2)
#方差
print(dev1)
print(dev2)
#测试
#当图像的数值全是同一个数时,均值和均方差相同,说明图片没有加载有用信息
h,w=m1.shape[:2]
img=np.zeros([h,w],np.uint8)
m,dev=cv.meanStdDev(img)
print(m)
print(dev)
逻辑运算–与或非
#逻辑运算--与或非
def logic_demo(m1,m2):
dst=cv.bitwise_and(m1,m2)
cv.imshow("and",dst)
dst=cv.bitwise_or(m1,m2)
cv.imshow("or", dst)
dst=cv.bitwise_not(m1)
cv.imshow("not m1", dst)
dst=cv.bitwise_not(m2)
cv.imshow("not m2", dst)
提高对比度、亮度
def contrast_brightness_demo(image,c,b):
h,w,ch=image.shape
blank=np.zeros([h,w,ch],image.dtype)
dst=cv.addWeighted(image,c,blank,1-c,b)
cv.imshow("con_bri_demo",dst)
总代码
import cv2 as cv
import numpy as np
#算数运算(加、减、乘、除)、均值、均方差
def add_demo(m1,m2):
dst=cv.add(m1,m2)
cv.imshow("add_demo",dst)
def subtract_demo(m1,m2):
dst=cv.subtract(m1,m2)
cv.imshow("subtract_demo",dst)
def multiply_demo(m1,m2):
dst=cv.multiply(m1,m2)
cv.imshow("multiply_demo",dst)
def divide_demo(m1,m2):
dst=cv.divide(m1,m2)
cv.imshow("divide_demo",dst)
def others(m1,m2):
#标准差越大说明色差越大
M1,dev1=cv.meanStdDev(m1)
M2 ,dev2= cv.meanStdDev(m2)
#均值
print(M1)
print(M2)
#方差
print(dev1)
print(dev2)
#测试
#当图像的数值全是同一个数时,均值和均方差相同,说明图片没有加载有用信息
h,w=m1.shape[:2]
img=np.zeros([h,w],np.uint8)
m,dev=cv.meanStdDev(img)
print(m)
print(dev)
#逻辑运算--与或非
def logic_demo(m1,m2):
dst=cv.bitwise_and(m1,m2)
cv.imshow("and",dst)
dst=cv.bitwise_or(m1,m2)
cv.imshow("or", dst)
dst=cv.bitwise_not(m1)
cv.imshow("not m1", dst)
dst=cv.bitwise_not(m2)
cv.imshow("not m2", dst)
def contrast_brightness_demo(image,c,b):
h,w,ch=image.shape
blank=np.zeros([h,w,ch],image.dtype)
dst=cv.addWeighted(image,c,blank,1-c,b)
cv.imshow("con_bri_demo",dst)
src = cv.imread("C:/Users/Administrator/Desktop/demo.png")
src1=cv.imread("D:/OpenCV/opencv/sources/samples/data/LinuxLogo.jpg")
src2=cv.imread("D:/OpenCV/opencv/sources/samples/data/WindowsLogo.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
add_demo(src1,src2)
subtract_demo(src1,src2)
multiply_demo(src1,src2)
divide_demo(src1,src2)
others(src1,src2)
logic_demo(src1,src2)
cv.imshow("input image", src2)
contrast_brightness_demo(src2,1.5,50)
cv.waitKey(0)
cv.destroyAllWindows()
print("Hi,python!")
备注
1.两个图片相乘之后的图片如下:
为什么周围会有锯齿,是因为把两个图片放大会发现,边缘并不是光滑的,当相乘的时候是有数字的,所以相乘以后不是光滑的
2.提高对比度和亮度是怎样实现的
首先介绍一下这个函数:
void cvAddWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta,double gamma, CvArr* dst );
参数1:src1,第一个原数组.
参数2:alpha,第一个数组元素权重
参数3:src2第二个原数组
参数4:beta,第二个数组元素权重
参数5:gamma,图1与图2作和后添加的数值。不要太大,不然图片一片白。总和等于255以上就是纯白色了。
参数6:dst,输出图片
最后的数值=src1* alpha+src2* beat+gamma
在本例中,contrast_brightness_demo(src2,1.5,50)
带入代码中,函数就变成了
dst=cv.addWeighted(src2,1.5,blank,1-1.5,50)
而在这之前,blank是一个全零的矩阵,所以不管乘多少都是0,就变成了src2* 1.5+50
在原来的数值上乘1.5,数值之间的差距越来越大,所以对比也就越来越大,而亮度则是线性相加。