OpenCV 图像上
一、OpenCV 图像基本运算
OpenCV 中图像本质上是一个 NumPy 数组,所以图像运算就是对矩阵进行运算。1、图像的加法
对每个像素进行加法
原像素:100
增加50:
100 + 50 = 150
效果:图片整体变亮。
importcv2 a=cv2.imread('4.png')c=a+10cv2.imshow('yuan',a)cv2.imshow('a+10',c)cv2.waitKey(0)cv2.waitKey(0)cv2.destroyAllWindows()2、cv加法
两张图像直接相加
importcv2#读取图片a=cv2.imread('4.png')b=cv2.imread('timg98.jpg')# #调整大小a=cv2.resize(a,(400,400))b=cv2.resize(b,(400,400))# cv2加法c2=cv2.add(a,b)cv2.imshow("cv2.add",c2)cv2.waitKey(0)cv2.destroyAllWindows()2、图像加权融合
两张图片按照比例融合:
效果:图片1 50%+图片2 50%
importcv2#读取图片a=cv2.imread('4.png')b=cv2.imread('timg98.jpg')# #调整大小a=cv2.resize(a,(400,400))b=cv2.resize(b,(400,400))c3=cv2.addWeighted(a,0.5,b,0.5,10)cv2.imshow("addWeighted",c3)cv2.waitKey(0)cv2.destroyAllWindows()二、OpenCV 图像边界扩充
1、BORDER_CONSTANT(常数填充)
简单理解:
就是给图片外围增加一圈固定颜色的像素
importcv2 ys=cv2.imread('3.png')top,bottom,left,right=50,50,50,50constant=cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_CONSTANT,value=(229,25,80))cv2.imshow('yuantu',ys)cv2.imshow('CONSTANT',constant)cv2.waitKey(0)cv2.destroyAllWindows
2、BORDER_REFLECT(镜像填充)
简单理解:
把原图像边缘像照镜子一样反射出去,用镜像内容填充边界。
它不会添加新的颜色,而是利用原图已有像素进行扩展。
importcv2 ys=cv2.imread('3.png')top,bottom,left,right=50,50,50,50reflect=cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_REFLECT)cv2.imshow('yuantu',ys)cv2.imshow('REFLECT',reflect)cv2.waitKey(0)cv2.destroyAllWindows()
3、BORDER_REFLECT101(镜像填充,不重复边缘)
简单理解:
像镜子一样反射原图,但跳过最外层边缘像素,不重复边缘。
importcv2 ys=cv2.imread('3.png')top,bottom,left,right=50,50,50,50reflect101=cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_REFLECT101)cv2.imshow('yuantu',ys)cv2.imshow('REFLECT_101',reflect101)cv2.waitKey(0)cv2.destroyAllWindows()
4、BORDER_REPLICATE(复制边缘)
简单理解:
把原图最外层的像素复制出去,作为新增边界。
importcv2 ys=cv2.imread('3.png')top,bottom,left,right=50,50,50,50replicate=cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_REPLICATE)cv2.imshow('REPLICATE',replicate)cv2.imshow('yuantu',ys)cv2.waitKey(0)cv2.destroyAllWindows()
5、BORDER_WRAP(循环填充)
简单理解:
把图像看成一个循环的平面,边界外的像素从图像另一侧接过来。
importcv2 ys=cv2.imread('3.png')top,bottom,left,right=50,50,50,50wrap=cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_WRAP)cv2.imshow('WRAP',wrap)cv2.imshow('yuantu',ys)cv2.waitKey(0)cv2.destroyAllWindows()三、OpenCV 图像阈值处理
作用:
根据设定的阈值,把灰度图像转换成二值图或者改变像素值。
1、THRESH_BINARY(二值化)
简单理解:
设置一个阈值,把灰度图转换成只有黑色和白色的二值图。
importcv2 image=cv2.imread('3.png',0)#灰度图,cv2.imshow('image',image)ret,binary=cv2.threshold(image,175,255,cv2.THRESH_BINARY)cv2.imshow('gray',image)cv2.waitKey(0)cv2.destroyAllWindows()2、THRESH_BINARY_INV(反二值化)
简单理解:
和 THRESH_BINARY 相反,把超过阈值的像素变黑,小于等于阈值的像素变白。
importcv2 image=cv2.imread('3.png',0)#灰度图,cv2.imshow('image',image)ret1,binaryinv=cv2.threshold(image,175,255,cv2.THRESH_BINARY_INV)cv2.imshow('binaryinv',binaryinv)cv2.waitKey(0)cv2.destroyAllWindows()
3、THRESH_TRUNC(截断)
简单理解:
超过阈值的像素被压缩到阈值,低于阈值的像素保持不变
importcv2 image=cv2.imread('3.png',0)#灰度图,cv2.imshow('image',image)ret2,trunc=cv2.threshold(image,175,255,cv2.THRESH_TRUNC)cv2.imshow('trunc',trunc)cv2.waitKey(0)cv2.destroyAllWindows()
4、THRESH_TOZERO(大于阈值保留)
简单理解:
小于等于阈值的像素变成黑色(0),大于阈值的像素保持原来的值。
importcv2 image=cv2.imread('3.png',0)#灰度图,cv2.imshow('image',image)ret3,tozero=cv2.threshold(image,175,255,cv2.THRESH_TOZERO)cv2.imshow('tozero',tozero)cv2.waitKey(0)cv2.destroyAllWindows()
5、THRESH_TOZERO_INV(小于阈值保留)
简单理解:
小于等于阈值的像素变成黑色(0),大于阈值的像素保持原来的值
importcv2 image=cv2.imread('3.png',0)#灰度图,cv2.imshow('image',image)ret4,tozeroinv=cv2.threshold(image,175,255,cv2.THRESH_TOZERO_INV)cv2.imshow('tozeroinv',tozeroinv)cv2.waitKey(0)cv2.destroyAllWindows()