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

(进阶向)Python第十四期OpenCv图像预处理方法[2]

目录

1、图像的翻转

2、图像的仿射变化

 2.1 旋转方法

2.2 图像的平移,向右下角平移

2.2 图像的缩放

3、图像的插值与填充

 3.1 边界复制填充,最近邻插值与原图对比

​编辑​编辑

3.2 边界反射填充,双线性插值与原图对比

3.3 边界反射101填充,双三次插值与原图对比

3.4 边界常数填充,lanczos4插值与原图的对比

3.5 边界包裹填充,像素区域插值与原图对比

4、图像的透视变换矩阵(矫正图片)

5、图像制作掩膜


引言:这一期继续看API方法,包括图像的旋转,填充,以及数学类方法的使用。

1、图像的翻转

————在opencv中图像的翻转是以镜像为中心的原点进行旋转的,通过选择我们可以获得与原图的镜像对比图,通过cv.flip(img,flipcode)方法来实现,flipcode的值不同对应的翻转方式也不同;

实例操作: 

import cv2 as cv
import numpy as npimage1 = cv.imread("../images/a.png")
img = cv.resize(image1, (300, 300))
cv.imshow("image1", img)
#翻转 镜像翻转 以图像中心为原点cv。flip(img, flipCode)
image2 = cv.flip(img, 0)#垂直翻转 沿x轴翻转
cv.imshow("image2", image2)
#filpcode = 1 水平翻转 沿y轴翻转
flip1 = cv.flip(img, 1)
cv.imshow("flip1", flip1)
#filpcode = -1 180度旋转
flip2 = cv.flip(img, -1)
cv.imshow("flip2", flip2)

2、图像的仿射变化

————仿射变化是指在OpenCV中的一种线性变化,保持了点距相对距离不会改变。包括旋转、平移、缩放、剪切等;利用cv.warpAffine()方法函数来实现;

 2.1 旋转方法

import cv2 as cvcat = cv.imread("../images/1.jpg")
#获取旋转矩阵 cv.getRotatationMatrix2D(旋转中心, 旋转角度, 缩放因子)
M = cv.getRotationMatrix2D((260,260), -45, 1)
cat2 = cv.warpAffine(cat, M, (520,520))
cv.imshow("cat", cat)
cv.imshow("cat2", cat2)
cv.waitKey(0)
cv.destroyAllWindows()

 

2.2 图像的平移,向右下角平移

import cv2 as cv
import numpy as npcat = cv.imread("../images/1.jpg")
cat = cv.resize(cat, (520,520))#定义平移矩阵
tx = 80
ty = 120
M = np.float32([[1,0,tx],[0,1,ty]])
#实现仿射变化
cat_move = cv.warpAffine(cat, M, (400,400))
cv.imshow("cat", cat)
cv.imshow("cat_move", cat_move)cv.waitKey(0)
cv.destroyAllWindows()

 

2.2 图像的缩放

import cv2 as cv
import numpy as npcat = cv.imread("../images/1.jpg")
cat = cv.resize(cat, (520,520))sx = 0.5
sy = 1
x = 80
y = 120
M = np.float32([[sx,0,x],[0,sy,y]])
cat_zoom = cv.warpAffine(cat, M, (540,540))
cv.imshow("cat", cat)
cv.imshow("cat_zoom", cat_zoom)cv.waitKey(0)
cv.destroyAllWindows()

 

3、图像的插值与填充

————在图像处理和计算机图形学中,插值(Interpolation)是一种通过已知数据点之间的推断或估计来获取新数据点的方法。它在图像处理中常用于处理图像的放大、缩小、旋转、变形等操作,以及处理图像中的像素值。图像插值算法是为了解决图像缩放或者旋转等操作时,由于像素之间的间隔不一致而导致的信息丢失和图像质量下降的问题。当我们对图像进行缩放或旋转等操作时,需要在新的像素位置上计算出对应的像素值,而插值算法的作用就是根据已知的像素值来推测未知位置的像素值。

import cv2 as cv#读图
cat = cv.imread("../images/pig.png")w = cat.shape[1]
h = cat.shape[0]
#旋转
#获取旋转矩阵
M = cv.getRotationMatrix2D((w//2,h//2), 45, 0.5)
#仿射变换
dst = cv.warpAffine(cat, M, (w,h),cv.INTER_NEAREST,borderMode=cv.BORDER_REPLICATE)#最近的插值
cv.imshow("dst", dst)#边界复制填充
dst1 = cv.warpAffine(cat, M, (w,h),cv.INTER_LINEAR,borderMode=cv.BORDER_REFLECT)#双线性插值 单线性插值 插两次:水平、垂直
cv.imshow("dst1", dst1)#边界反射填充
dst2 = cv.warpAffine(cat, M, (w,h),cv.INTER_CUBIC,borderMode=cv.BORDER_REFLECT_101)#双三次插值 16个 4*4 wi wj
cv.imshow("dst2", dst2)#边界反射101填充
dst3 = cv.warpAffine(cat, M, (w,h),cv.INTER_LANCZOS4,borderMode=cv.BORDER_CONSTANT,borderValue=(255,0,0))#Lanczos4插值 64个 8*8
cv.imshow("dst3", dst3)#边界常数填充
dst4 = cv.warpAffine(cat, M, (w,h),cv.INTER_AREA,borderMode=cv.BORDER_WRAP)#像素区域插值 缩小:均值滤波 放大:整数 双线性 4点,2*2
cv.imshow("dst4", dst4)#边界包裹填充
cv.waitKey(0)
cv.destroyAllWindows()

 3.1 边界复制填充,最近邻插值与原图对比

3.2 边界反射填充,双线性插值与原图对比

3.3 边界反射101填充,双三次插值与原图对比

3.4 边界常数填充,lanczos4插值与原图的对比

3.5 边界包裹填充,像素区域插值与原图对比

4、图像的透视变换矩阵(矫正图片)

————所谓矫正图片就是将一张看着很斜的图片矫正铺直,这里我们使用cv.warpPerspective函数来实现;

 实例操作:

import cv2 as cv
import numpy as np
ox = cv.imread("../images/3.png")
cv.imshow("ox",ox)
shape = ox.shape#获取图片的高宽
picture1 =np.float32([[175,94],[527,137],[110,297],[501,346]])#定义图片的坐标点
picture2 =np.float32([[0,0],[shape[1],0],[0,shape[0]],[shape[1],shape[0]]])#定义图片的坐标点
M = cv.getPerspectiveTransform(picture1,picture2)#获取透视变换矩阵
ox1 = cv.warpPerspective(ox,M,(shape[1],shape[0]),cv.INTER_LINEAR,borderMode=cv.BORDER_CONSTANT)#透视变换
cv.waitKey(0)
cv.destroyAllWindows()

 

5、图像制作掩膜

————掩膜(Mask)是一种在图像处理中常见的操作,它用于选择性地遮挡图像的某些部分,以实现特定任务的目标。掩膜通常是一个二值化图像,并且与原图像的大小相同,其中目标区域被设置为1(或白色),而其他区域被设置为0(或黑色),并且目标区域可以根据HSV的颜色范围进行修改。简言之就是局部变参;API方法用到了,cv.inRange,cv.COLOR_BGR2HSV,

 实例操作:

import cv2 as cv
import numpy as npdemo = cv.imread("../images/demo.png")
demo1=cv.resize(demo, (640, 640))#改变大小
hsv = cv.cvtColor(demo1, cv.COLOR_BGR2HSV)#转换为HSV色度
cv.imshow("demo", demo)
#图像掩膜
lower = np.array([0, 43, 46])#最低颜色范围红色
upper = np.array([10, 255, 255])#最高颜色范围红色
lower1 = np.array([100, 43, 46])#最低颜色范围蓝色
upper1 = np.array([124, 255, 255])#最高颜色范围蓝色
lower2 = np.array([35, 43, 46])#最低颜色范围绿色
upper2 = np.array([77, 255, 255])#最高颜色范围绿色
lower3 = np.array([26, 43, 46])#最低颜色范围黄色
upper3 = np.array([35, 255, 255])#最高颜色范围黄色
mask3 = cv.inRange(hsv,lower3,upper3)#制作黄色掩膜
mask2 = cv.inRange(hsv,lower2,upper2)#制作绿色掩膜
mask1 = cv.inRange(hsv,lower1,upper1)#制作蓝色掩膜
mask = cv.inRange(hsv,lower,upper)#制作红色掩膜
#颜色替换
arr = mask == 255
demo1[arr] = (0, 255, 0)#改变颜色
#颜色提取
dst = cv.bitwise_and(demo1,demo1,mask=mask)#提取红色
dst1 = cv.bitwise_and(demo1,demo1,mask=mask1)#提取蓝色
dst2 = cv.bitwise_and(demo1,demo1,mask=mask2)#提取绿色
dst3 = cv.bitwise_and(demo1,demo1,mask=mask3)#提取黄色
cv.imshow("dst", dst)#显示红色
cv.imshow("dst1", dst1)#显示蓝色
cv.imshow("dst2", dst2)#显示绿色
cv.imshow("dst3", dst3)#显示黄色
cv.imshow("mask", mask)
cv.imshow("mask1", mask1)
cv.imshow("mask2", mask2)
cv.imshow("mask3", mask3)
print(demo.shape)
print(mask.shape)
cv.waitKey(0)
cv.destroyAllWindows()

总结:本期继续学习了许多的API方法,图像预处理的内容有许多,应该还有一期,慢慢掌握API方法,多多巩固知识;

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

相关文章:

  • ModernBERT如何突破BERT局限?情感分析全流程解析
  • 输电线路微气象在线监测装置:保障电网安全的科技屏障
  • Text2SQL智能问答系统开发(一)
  • 成品电池综合测试仪:保障电池品质与安全的核心工具|深圳鑫达能
  • C++抽象类完全指南
  • 三坐标测量仪高效批量检测轴类传动零件
  • 基于深度学习的图像分类:使用EfficientNet实现高效分类
  • 基础NLP | 常用工具
  • DeepSpeed-FastGen:通过 MII 和 DeepSpeed-Inference 实现大语言模型的高吞吐文本生成
  • 机器翻译编程
  • Unity是如何把3D场景显示到屏幕上的——Unity的渲染过程
  • 实战演练—基于Transformers的NLP解决方案总结
  • Python实现PDF按页分割:灵活拆分文档的技术指南
  • 【Rust线程】Rust高并发编程之线程原理解析与应用实战
  • K8s WebUI 选型:国外 Rancher vs 国内 KubeSphere vs 原生 Dashboard,从部署到使用心得谁更适合企业级场景?
  • 【REACT18.x】CRA+TS+ANTD5.X封装自定义的hooks复用业务功能
  • 初识opencv03——图像预处理2
  • C++vector(2)
  • TreeMap一致性哈希环设计与实现 —— 高可用的数据分布引擎
  • 【RAG优化】RAG应用中图文表格混合内容的终极检索与生成策略
  • 【AI】Jupyterlab中打开文件夹的方式
  • 元宇宙工厂网页新形态:3D场景嵌入与WebGL交互的轻量化实现
  • MySQL 表的操作
  • 奇异值分解(Singular Value Decomposition, SVD)
  • 武汉火影数字|数字党建展厅制作 VR红色数字纪念馆 党史馆数字化打造
  • Windows 10 远程桌面(RDP)防暴力破解脚本
  • Linux内核中动态内存分配函数解析
  • 滑动窗口机制及其应用
  • 云渲染的算力困局与架构重构:一场正在发生的生产力革命
  • Apache POI 实战应用:企业级文档处理解决方案