当前位置: 首页 > news >正文

OpenCV ------图像基础处理(一)

在 OpenCV 的图像处理世界中,除了图像边框处理,还有一些基础且重要的函数和运算,它们在图像编辑、融合等场景中发挥着关键作用。下面我们就来详细介绍cv2.copyMakeBorder()函数的具体参数与作用,以及图像加法运算和加权运算的相关内容。

一、图像边界扩充:

copyMaKeBorder()函数:

函数原型:

dst = cv2.threshold(src,top,bottom,left,right,borderType,value=None)

src:这是要扩充边界的原始图像,是函数处理的基础对象。

top、bottom、left、right:分别表示在图像上、下、左、右四个方向上添加的边界宽度

borderType:定义要添加边框的类型,不同的类型会产生截然不同的边界效果,具体如下:

1.CV2.BORDER_CONSTANT:
添加的边界框像素值为常数(需要额外再给定一个参数)。

示例代码:

value=额外给定参数(rgb参数)

import cv2
ys = cv2.imread('img.png')
top,bottom,left,right=50,50,50,50
constant = cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_CONSTANT,value=(100,73,210))
cv2.imshow('yuan',ys)
cv2.waitKey(0)
cv2.imshow('CONSTANT',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

可以看出边框被玫红色填补

2.CV2.BORDER_REFLECT:

添加的边框像素将是边界元素的镜面反射,类似于gfedchalabcdefghlhgfedcba。(交界处也复制了)

import cv2
ys = cv2.imread('img.png')
top,bottom,left,right=50,50,50,50
reflet = cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_REFLECT)
cv2.imshow('yuan',ys)
cv2.waitKey(0)
cv2.imshow('CONSTANT',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.CV2.BORDER_REFLECT_101 或
 CV2.BORDER_DEFAULT:

和上面类似,但是有一些细微的不同,类似于gfedcblabcdefghgfedcba (交接处删除了)

示例代码:

这个图不明显。。

import cv2
ys = cv2.imread('img.png')
top,bottom,left,right=50,50,50,50
reflet101 = cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_REFLECT101)
cv2.imshow('yuan',ys)
cv2.waitKey(0)
cv2.imshow('CONSTANT',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. CV2.BORDER_REPLICATE:

使用最边界的像素值代替,类似于aaaaaalabcdefghIhhhhhhh

示例代码:

import cv2
ys = cv2.imread('img.png')
top,bottom,left,right=50,50,50,50
replicate = cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_REPLICATE)
cv2.imshow('yuan',ys)
cv2.waitKey(0)
cv2.imshow('CONSTANT',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像相当于被拉伸了,从图中可以明显看出

5.#CV2.BOR激DER_WRAP:

上下左右边依次换,cdefghlabcdefghlabcdefg

示例代码:

import cv2
ys = cv2.imread('img.png')
top,bottom,left,right=50,50,50,50
wrap = cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_WRAP)
cv2.imshow('yuan',ys)
cv2.waitKey(0)
cv2.imshow('CONSTANT',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()

相同数字为互换位置,不必在意,知道就行了

二、图像中的算数

1. 减法:制造「暗角」特效

c = a - 100
  • 对整张图逐像素减去固定值 100。

  • 结果所有像素变暗,呈现低曝光的胶片感。

注意:NumPy 减法会出现负值回绕(<0 时从 255 继续倒数),如果想把负值截断到 0,应使用 cv2.subtract(a, 100)

2. 加法:两张图「硬叠加」

c = a[50:450, 50:400] + b[50:450, 50:400]
  • 这里是逐像素相加

  • 溢出截断:OpenCV 的 cv2.add() 会把 >255 的像素强制设为 255,而 NumPy 默认会取模(回绕),造成色彩失真。

  • 适合制作重影、鬼影效果。

示例代码:

import cv2
a = cv2.imread('img.png')
b=cv2.imread('longnv.webp')
c=a-100
d = a+100
cv2.imshow('yuan',a)
cv2.imshow('a-10',c)
cv2.imshow('a+10',d)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.两图像相加减:

对于cv2.add()运算,当对图像a,图像b进行加法求和时,遵循以下规则
当某位置像素相加得到的数值小于255时,该位置数值为俩图像该位置像素相加之和
当某位置像素相加得到的数值大于255时,该位置数值为255

import cv2
a = cv2.imread('img.png')
b=cv2.imread('longnv.webp')
c = a[50:450,50:400]+b[50:450,50:400]
cv2.imshow('a+b',c)
cv2.waitKey(0)

运行结果:

4.图像加权

计算两幅图像的像素值之和时,将每幅图像的权重考虑进来

同样的相加数据,加入权重会得出不一样的图片:

权重大的更为清晰

权重小的较为透明

实例代码:

import cv2
a = cv2.imread('img.png')
b=cv2.imread('longnv.webp')
c = a[50:450,50:400]+b[50:450,50:400]
cv2.imshow('a+b',c)
cv2.waitKey(0)
a = cv2.imread('img.png')
b = cv2.imread('longnv.webp')
b = cv2.resize(b,(400,400))
a = cv2.resize(a,(400,400))
c=cv2.addWeighted(a,0.2,b,0.8,10)
cv2.imshow('addwd',c)
cv2.waitKey(0)
cv2.destroyAllWindows()
#

http://www.dtcms.com/a/331195.html

相关文章:

  • 【OpenCV】Mat详解
  • 论,物联网日志系统架构如何设计?
  • AI增强SEO关键词表现
  • Postman 平替 技术解析:架构优势与实战指南
  • 审批流程系统设计与实现:状态驱动、灵活扩展的企业级解决方案
  • Java研学-RabbitMQ(八)
  • Rabbitmq+STS+discovery_k8s +localpv部署排坑详解
  • 队列的使用以及泛型思考[二叉树的层序遍历]
  • 【P27 4-8】OpenCV Python——Mat类、深拷贝(clone、copyTo、copy)、浅拷贝,原理讲解与示例代码
  • Horse3D游戏引擎研发笔记(五):在QtOpenGL环境下,仿three.js的BufferGeometry管理VAO和EBO绘制四边形
  • 算法训练营day51 图论② 岛屿数量深搜、广搜、最大面积
  • 图论(5)最小生成树算法
  • Claude Code 国内直接使用,原生支持 Windows 免WSL安装教程
  • Day56--图论--108. 冗余的边(卡码网),109. 冗余的边II(卡码网)
  • Day58--图论--117. 软件构建(卡码网),47. 参加科学大会(卡码网)
  • MySQL窗口函数与PyMySQL以及SQL注入
  • MySQLl中OFFSET 的使用方法
  • 中国AI生态加速迭代,AI硬件引领人机互动新范式
  • LeetCode 分类刷题:2302. 统计得分小于 K 的子数组数目
  • Gradle(四)Maven 项目迁移 Gradle 项目实践
  • 文件服务器:samba
  • Java 并发新范式:用 Structured Concurrency 优雅收拾多线程烂摊子
  • 编排之神-Kubernetes微服务专题--ingress-nginx及金丝雀Canary的演练
  • 电动自行车:中国式制霸
  • 支付域——账户系统设计
  • 2025年Java大厂面试场景题全解析:高频考点与实战攻略
  • 优德普SAP一体化平台有哪些功能?
  • 力扣(盛最多水的容器)
  • Java基础 8.14
  • 力扣-5.最长回文子串