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

相关文章:

  • Elasticsearch ABAC 配置:基于患者数据的动态访问控制
  • Exif.js获取手机拍摄照片的经纬度
  • 风电功率预测实战:从数据清洗到时空建模​​
  • 机器翻译:回译与低资源优化详解
  • C# 高并发处理方式
  • 【每天一个知识点】生物的数字孪生
  • 如何选择适合工业场景的物联网网关?
  • TWINCAT+COPLEY ethercat配置
  • week1-[分支嵌套]公因数
  • Cherryusb UAC例程对接STM32 SAI播放音乐和录音(上)=>SAI+TX+RX+DMA的配置与音频回环测试
  • C++:浅尝gdb
  • 云计算-Docker Compose 实战:从OwnCloud、WordPress、SkyWalking、Redis ,Rabbitmq等服务配置实例轻松搞定
  • Mybatis学习笔记(七)
  • 《疯狂Java讲义(第3版)》学习笔记ch4
  • 分享10个ai生成ppt网站(附ai生成ppt入口)
  • 智慧工地从工具叠加到全要素重构的核心引擎
  • 跨域及解决方案
  • AI搜索重构下的GEO优化服务商格局观察
  • 一致性哈希Consistent Hashing
  • DAY 42 Grad-CAM与Hook函数
  • JS 解构赋值语法
  • 【OpenCV】Mat详解
  • docker compose部署mysql
  • 面试题之项目中灰度发布是怎么做的
  • 深入了解linux系统—— 线程概念
  • ZigBee入门与提高(3)—— ZigBee协议初识
  • Visual Studio2019/2022离线安装完整教程(含闪退解决方法)
  • Windows bypassUAC 提权技法详解(一)
  • 基于FPGA的8PSK+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR
  • Python之Django使用技巧(附视频教程)