【边缘填充】——图像预处理(OpenCV)

目录

[1 边界复制(BORDER_REPLICATE)](#1 边界复制(BORDER_REPLICATE))

[2 边界反射(BOEDER_REFLECT)](#2 边界反射(BOEDER_REFLECT))

[3 边界反射101(BORDER_REFLECT101)](#3 边界反射101(BORDER_REFLECT101))

[4 边界常数(BORDER_CONSTANT)](#4 边界常数(BORDER_CONSTANT))

[5 边界包裹(BORDER_WRAP)](#5 边界包裹(BORDER_WRAP))


为什么需要填充边缘呢?我们以下图为例。

可以看到,左图在逆时针旋转45度之后原图的四个顶点在右图中已经看不到了,同时,右图的四个顶点区域其实是什么都没有的,因此我们需要对空出来的区域进行一个填充。右图就是对空出来的区域进行了像素值为(0,0,0)的填充,也就是黑色像素值的填充。除此之外,后续的一些图像处理方式也会用到边缘填充,这里介绍五个常用的边缘填充方法。

1 边界复制(BORDER_REPLICATE)

边界复制会将边界处的像素值进行复制,然后作为边界填充的像素值,如下图所示,可以看到四周的像素值都一样。

复制代码
new_img=cv.warpAffine(img,M,(w,h),cv.INTER_LANCZOS4,borderMode=cv.BORDER_REPLICATE)

案例:

python 复制代码
import cv2 as cv
face = cv.imread("./images/face.png")
# 定义旋转中心
h,w = face.shape[:2]
center = (w//2,h//2)
# 获取旋转矩阵
M = cv.getRotationMatrix2D(center,45,0.5)
# 使用仿射变换矩阵进行旋转
img1 = cv.warpAffine(face,M,(w,h),flags=cv.INTER_LANCZOS4)
# 边界复制
replicate = cv.warpAffine(face,M,(w,h),flags=cv.INTER_LANCZOS4,borderMode=cv.BORDER_REPLICATE)
cv.imshow("face",face)
cv.imshow("new1",img1)
cv.imshow("replicate",replicate)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

2 边界反射(BOEDER_REFLECT)

根据原图的边缘进行反射。

python 复制代码
new_img=cv.warpAffine(img,M,(w,h),cv.INTER_LANCZOS4,borderMode=cv.BORDER_REFLECT)

案例:

python 复制代码
import cv2 as cv
face = cv.imread("./images/face.png")
# 定义旋转中心
h,w = face.shape[:2]
center = (w//2,h//2)
# 获取旋转矩阵
M = cv.getRotationMatrix2D(center,45,0.5)
# 使用仿射变换矩阵进行旋转
img1 = cv.warpAffine(face,M,(w,h),flags=cv.INTER_LANCZOS4)
# 边界反射
reflect = cv.warpAffine(face,M,(w,h),flags=cv.INTER_LANCZOS4,borderMode=cv.BORDER_REFLECT)
cv.imshow("face",face)
cv.imshow("new1",img1)
cv.imshow("reflect",reflect)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

3 边界反射101(BORDER_REFLECT101)

与边界反射不同的是,不再反射边缘的像素点。

python 复制代码
new_img=cv.warpAffine(img,M,(w,h),cv.INTER_LANCZOS4,borderMode=cv.BORDER_REFLECT_101)

案例:

python 复制代码
import cv2 as cv
face = cv.imread("./images/face.png")
# 定义旋转中心
h,w = face.shape[:2]
center = (w//2,h//2)
# 获取旋转矩阵
M = cv.getRotationMatrix2D(center,45,0.5)
# 使用仿射变换矩阵进行旋转
img1 = cv.warpAffine(face,M,(w,h),flags=cv.INTER_LANCZOS4)
# 边界反射101
reflect101 = cv.warpAffine(face,M,(w,h),flags=cv.INTER_LANCZOS4,borderMode=cv.BORDER_REFLECT_101)
cv.imshow("face",face)
cv.imshow("new1",img1)
cv.imshow("reflect101",reflect101)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

4 边界常数(BORDER_CONSTANT)

指定常数值作为边缘填充的像素值。

python 复制代码
new_img=cv.warpAffine(img,M,(w,h),cv.INTER_LANCZOS4,borderMode=cv.BORDER_CONSTANT,borderValue=(0,0,255))

案例:

python 复制代码
import cv2 as cv
face = cv.imread("./images/face.png")
# 定义旋转中心
h,w = face.shape[:2]
center = (w//2,h//2)
# 获取旋转矩阵
M = cv.getRotationMatrix2D(center,45,0.5)
# 使用仿射变换矩阵进行旋转
img1 = cv.warpAffine(face,M,(w,h),flags=cv.INTER_LANCZOS4)
# 边界常数
constant = cv.warpAffine(face,M,(w,h),flags=cv.INTER_LANCZOS4,borderMode=cv.BORDER_CONSTANT,borderValue=(255,0,0))
cv.imshow("face",face)
cv.imshow("new1",img1)
cv.imshow("constant",constant)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

5 边界包裹(BORDER_WRAP)

复制图像进行滑动填充

python 复制代码
new_img=cv.warpAffine(img,M,(w,h),cv.INTER_LANCZOS4,borderMode=cv.BORDER_WRAP)

案例:

python 复制代码
import cv2 as cv
face = cv.imread("./images/face.png")
# 定义旋转中心
h,w = face.shape[:2]
center = (w//2,h//2)
# 获取旋转矩阵
M = cv.getRotationMatrix2D(center,45,0.5)
# 使用仿射变换矩阵进行旋转
img1 = cv.warpAffine(face,M,(w,h),flags=cv.INTER_LANCZOS4)
# 边界包裹
wrap = cv.warpAffine(face,M,(w,h),flags=cv.INTER_LANCZOS4,borderMode=cv.BORDER_WRAP)
cv.imshow("face",face)
cv.imshow("new1",img1)
cv.imshow("wrap",wrap)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

相关推荐
女神下凡2 分钟前
这是 Cursor(Composer) 的五种核心交互模式
服务器·人工智能·windows·vscode·microsoft
AI创界者4 分钟前
告别云端限制!Sulphur 2 本地文生视频/图生视频整合包,本地部署,解压即用,保姆级部署与工作流实战
人工智能·python·aigc·音视频
蓝星空20008 分钟前
GPT-Image-2 实战教程:一段提示词生成专业分镜图(含 9 格脚本模板,附一键同款)
人工智能·gpt·image2·imagen
用户3379225456810 分钟前
从字节跳动 DeerFlow 源码看 Agent 平台设计(二):工具系统设计 — 从全量绑定到按需加载
人工智能
IT 行者17 分钟前
GitHub Spec Kit 实战(四):读懂和干预 /speckit.plan——AI 最自由发挥的一步
java·人工智能·github·ai编程·claude
城事漫游Molly18 分钟前
AI辅助实验设计的标准工作流
人工智能·提示词·ai for science·科研论文·实验设计
tianxingjian201919 分钟前
科技创新核心工具,TRIZ理论助力技术难题高效突破
大数据·人工智能·科技
极客老王说Agent23 分钟前
自动化架构演进:2026年有比RPA更加稳定的技术吗?
人工智能·ai·chatgpt·架构·自动化·rpa
静Yu34 分钟前
从“生成一篇知识点”到“面对面讲清一道题”:我用魔珐星云改造 AI 教育助手的实践
人工智能
陈天伟教授36 分钟前
图解人工智能(60)人工智能应用-AI游戏
人工智能·游戏