OpenCV 图像上

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