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

广东网站制作网站建设公司湖南

广东网站制作,网站建设公司湖南,个人网站主页设计,风险网站如何解决办法文章目录 前言一、图像翻转二、图像的仿射变换1.仿射变换的原理2.仿射变换函数3.图像旋转4.图像平移5.图像缩放6.图像剪切 三、插值方法1.最近领插值2.双线性插值法3.双三次插值4.代码展示 前言 通过今天的学习,我掌握了OpenCV中有关图像翻转,图像仿射变…

文章目录

  • 前言
  • 一、图像翻转
  • 二、图像的仿射变换
    • 1.仿射变换的原理
    • 2.仿射变换函数
    • 3.图像旋转
    • 4.图像平移
    • 5.图像缩放
    • 6.图像剪切
  • 三、插值方法
    • 1.最近领插值
    • 2.双线性插值法
    • 3.双三次插值
    • 4.代码展示


前言

  • 通过今天的学习,我掌握了OpenCV中有关图像翻转,图像仿射变换的原理和操作以及部分OpenCV中的插值方法

一、图像翻转

  • 使用flip方法对图像进行翻转
  • cv.flip(img,flipcode)
  • img:指要进行翻转操作的图像名
  • flipcode:指图像翻转的方式
img = cv.imread(r"img\cat.png")flip1 = cv.flip(img,0) #垂直翻转
flip2 = cv.flip(img,1) #水平翻转
flip3 = cv.flip(img,-1) #垂直结合水平翻转

二、图像的仿射变换

1.仿射变换的原理

  • 仿射变换实际上是一种线性变换
  • 仿射变换主要包括:旋转,平移,缩放以及剪切
  • 实现仿射变换实际上是在做矩阵乘法
    在这里插入图片描述
  • 在上图所示的式子中,a,b,c,d代表线性变化的系数,而t参数代表平移部分的参数,输入点是齐次坐标形式

2.仿射变换函数

  • 在OpenCV中,我们先使用warpAffine函数接收仿射变换矩阵从而返回一个图像数组
  • cv2.warpAffine(img,M,dsize)
  • 因此,我们需要先得到仿射变换矩阵,才能得到图像数组
  • 我们使用Numpy数组中的float32方法进行构造

3.图像旋转

  • cv2.getRotationMatrix2D(center,angle,scale)
  • center:指旋转中心。通常是图像的几何中心
  • angle:指旋转角度
  • scale:指返回图像的缩放比例
img = cv.imread(r"img\cat1.png")
h,w,_ = img.shape
center = (w//2,h//2)
M = cv.getRotationMatrix2D(center,90,0.6)
img1 = cv.warpAffine(img,M,(w,h))
cv.imshow('img1',img1)
cv.waitKey(0)
cv.destroyAllWindows()

4.图像平移

  • 平移只改变图像的相对位置,角度不发生变化
  • 可用以下矩阵乘法表示:
    在这里插入图片描述
img = cv.imread(r"img\cat1.png")
h,w,_ = img.shape
x,y = 200,100
M = np.float32([[1,0,x],[0,1,y]]) #构造平移仿射矩阵
img2 = cv.warpAffine(img,M,(w,h))
cv.imshow('img',img)
cv.imshow('img2',img2)
cv.waitKey(0)
cv.destroyAllWindows()

5.图像缩放

  • 缩放改变图像的大小,相对位置不便,即不发生平移操作
  • 可用以下矩阵乘法表示:
    在这里插入图片描述
img = cv.imread(r"img\cat1.png")
h,w,_ = img.shape
sx,sy = 0.5,0.8
w1,h1 = int(w*sx),int(h*sy)
M = np.float32([[sx,0,0],[0,sy,0]])
img3 = cv.warpAffine(img,M,(w,h)) #输出图像是原图的尺寸
img4 = cv.warpAffine(img,M,(w1,h1)) #输出图像是缩放后的尺寸
cv.imshow('img',img)
cv.imshow('img3',img3)
cv.imshow('img4',img4)
cv.waitKey(0)
cv.destroyAllWindows()

6.图像剪切

  • 剪切区别于切片,可以改变图像的形状,但保持图像面积不便
  • 可用以下矩阵乘法表示:
    在这里插入图片描述
img = cv.imread(r"img\cat1.png")
img_r = cv.resize(img,(300,300))
shx,shy = 0.2,0.2
M = np.float32([[1,shy,0],[shx,1,0]])
img5 = cv.warpAffine(img_r,M,(360,360))
cv.imshow('img_r',img_r)
cv.imshow('img5',img5)
cv.waitKey(0)
cv.destroyAllWindows()

三、插值方法

  • 在上一节提到了图像的仿射变换,而这里的插值方法就是为了解决图像缩放或者旋转等操作时,由于像素之间的间隔不一致而导致的信息丢失和图像质量下降的问题
  • 插值算法的作用是根据已知的像素值来推测未知的像素值

1.最近领插值

s r c X = d s t X ∗ s r c W i d t h d s t W i d t h s r c X=d s t X*{\frac{s r c Width}{d s t Width}} srcX=dstXdstWidthsrcWidth

s r c Y = d s t Y ∗ s r c H e i g h t d s t H e i g h t s r cY=d s t Y*{\frac{s r c H e i g h t}{d s t H e i g h t}} srcY=dstYdstHeightsrcHeight

  • dst:代表目标图像
  • src:代表目标图像中某点对应原图
    tips:如果结果得到了小数,则使用四舍五入进行计算

2.双线性插值法

  • 当图像经过缩放、旋转等变换后,目标图像的像素位置可能对应原图的非整数坐标。直接使用最近邻插值(取最近的整数坐标像素)会导致锯齿状边缘,而双线性插值通过周围像素的加权平均,生成更平滑的过渡
  • 本质上是分别在水平方向和垂直方向上做线性插值
    在这里插入图片描述
  • 如上图,四个Q点是原图中距离P点最近的四个点,首先将P投影到水平方向上,对两个R点分别进行一次水平线性插值,再在竖直方向上对两个R点进行线性插值得到P点的像素值

3.双三次插值

  • 与双线性插值法相同,该方法也是通过映射,在映射点的邻域内通过加权来得到放大图像中的像素值。不同的是,双三次插值法需要原图像中近邻的16个点来加权,也就是4x4的网格。

4.代码展示

img = cv.imread(r"img\cat1.png")
h,w = img.shape[:2]
M = cv.getRotationMatrix2D((w//2,h//2),0,0.6)
# img1 = cv.warpAffine(img,M,(w,h),flags=cv.INTER_NEAREST) #最近邻插值
# img1 = cv.warpAffine(img,M,(w,h),flags=cv.INTER_LINEAR) #双线性插值
# img1 = cv.warpAffine(img,M,(w,h),flags=cv.INTER_AREA) #像素区域插值
# img1 = cv.warpAffine(img,M,(w,h),flags=cv.INTER_CUBIC) #双三次插值
img1 = cv.warpAffine(img,M,(w,h),flags=cv.INTER_LANCZOS4) #Lanczos插值
cv.imshow('img1',img1)
cv.waitKey(0)
cv.destroyAllWindows()

THE END


文章转载自:

http://Svkymw9G.dqpyr.cn
http://Obb8qCZY.dqpyr.cn
http://8rEsoPmS.dqpyr.cn
http://KsMXMxWQ.dqpyr.cn
http://ypO70Ns8.dqpyr.cn
http://lpnjlQkK.dqpyr.cn
http://708rl7c6.dqpyr.cn
http://L4eIhNci.dqpyr.cn
http://nH7SnT6n.dqpyr.cn
http://qnQ2CWRt.dqpyr.cn
http://DOZsezF2.dqpyr.cn
http://lyTdHlY0.dqpyr.cn
http://kExjC1wv.dqpyr.cn
http://hIPzvWaI.dqpyr.cn
http://Ilmmltut.dqpyr.cn
http://NUoRKPgO.dqpyr.cn
http://ScHTPj7x.dqpyr.cn
http://k8XCbiP3.dqpyr.cn
http://KoqQAmbn.dqpyr.cn
http://PB6OyVau.dqpyr.cn
http://97DLuIM7.dqpyr.cn
http://9uqeRSBz.dqpyr.cn
http://wc10Ux3r.dqpyr.cn
http://qUB647gw.dqpyr.cn
http://1bA6sMAv.dqpyr.cn
http://ZuYVzIsz.dqpyr.cn
http://El7nZmOe.dqpyr.cn
http://gP2zhyhs.dqpyr.cn
http://g2O2rQbP.dqpyr.cn
http://n2Dxj68H.dqpyr.cn
http://www.dtcms.com/wzjs/634993.html

相关文章:

  • 建站工具有哪些cms怎么做企业网站一级悬浮菜单
  • 免费申请做网站北京网站设计公司哪个好
  • 做驾校题目用什么网站好做网站在哪接单
  • 玛纳斯县住房和城乡建设局网站网站设计中搜索界面怎么做
  • 做课件的网站百度手机网址提交
  • 河北网站备案多久云虚拟主机怎么做网站
  • 自学网站建设 难吗南宁网站优化推广方案
  • 响应式网站建设服务商办公室装修注意事项及细节
  • 淘宝客网站备案信息怎么写江西有色建设集团有限公司网站
  • 求邯郸网站制作网络营销有哪些推广的方法
  • 网站推广主要是做什么网站如何备案要关站吗
  • photoshop画简单网站浙江网缘科技有限公司
  • 阿里云做网站麻烦吗网站索引量暴增
  • 网站建设网页制电子产品定制开发
  • 新浪博客怎么做网站随州网站建设学习
  • 知名网站排行榜wordpress站标签打开空白
  • 网站开发是固定资产吗scratch
  • 专做动漫解说的网站腾讯云wordpress搭建网站
  • 网站营销策略湛江网站建设模板定位工厂
  • 可信赖的大良网站建设导航站 wordpress
  • 一流小说网站模板广州个人网站备案要多久
  • 专业的餐饮加盟网站建设网站不备案影响收录吗
  • 河北邯郸做网站的公司哪家好网站建设后压缩代码
  • 小工作室做网站wordpress弹窗广告
  • 网站的设计与实现成都网站制作推来客网站系统好吗
  • 晋州市建设局网站网站建设实务课本
  • 南宁市住房和城乡建设局网站网页跳转到别的网站
  • 东莞市的网站公司哪家好龙岗区住房和建设局官网
  • 广州建设执业注册中心网站龙岩网红景点
  • 兰州网站怎么建设verycloud wordpress