当前位置: 首页 > 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.lryc.cn/news/620716.html

相关文章:

  • 【P81 10-7】OpenCV Python【实战项目】——车辆识别、车流统计(图像/视频加载、图像运算与处理、形态学、轮廓查找、车辆统计及显示)
  • 【OpenCV】Mat详解
  • 入门基础人工智能理论
  • 计算机视觉(opencv)实战二——图像边界扩展cv2.copyMakeBorder()
  • 论,物联网日志系统架构如何设计?
  • AI增强SEO关键词表现
  • Postman 平替 技术解析:架构优势与实战指南
  • 考研408《计算机组成原理》复习笔记,第五章(2)——CPU指令执行过程
  • 使用 Docker 部署 PostgreSQL
  • 考研408《计算机组成原理》复习笔记,第四章(3)——指令集、汇编语言
  • Java设计模式之《策略模式》
  • Effective C++ 条款41:理解隐式接口和编译期多态
  • 应用系统连达梦数据库报“服务器模式不匹配”的根源与修复方案
  • 使用colmap自制3DGaussian_Splatting数据集
  • BotCash:GPT-5发布观察 工程优化的进步,还是技术突破的瓶颈?
  • GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚
  • 通过机器学习框架实现Android手写识别输入功能
  • Spring Boot 3中JWT密钥安全存储方案
  • Python训练营打卡Day32-神经网络的训练
  • 【Golang】Golang内存泄漏问题排查(二)
  • OpenCv(三)——图像平滑处理
  • 8. 函数简介
  • OpenCV中对图像进行平滑处理的4种方式
  • HarmonyOS AI辅助编程工具(CodeGenie)智慧调优
  • 力扣(LeetCode) ——225 用队列实现栈(C语言)
  • 信息vs知识:人类学习与AI规则提取
  • 异步编程的 8 种实现方式:疑难点与注意事项解析
  • 《疯狂Java讲义(第3版)》学习笔记ch4
  • 安全加固4(K8S最小化微服务安全)
  • C++ 中的元控制流与概念化类型擦除