02-图像的几何变换

一、图片缩放

imageInfo:图片宽、高、通道个数等 缩放:
等比例缩放:宽高比不变
任意比例缩放:图片拉伸、非拉伸 窗体大小

实现步骤:
1,完成图像的加载,拿到图像的数据信息
2,图片的宽度、高度
3,调用resize方法完成图片的缩放功能
4,检查最终的效果图

import cv2
img = cv2.imread('E:\Jupyter_workspace\study\data/Aa.jpg',1)
imgInfo = img.shape
print(imgInfo)height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]# 放大和缩小  等比例缩放和非等比例缩放
dstHeight = int(height*0.5)
dstWidth = int(width*0.5)#四种常见的图片缩放方法:最近领域插值、双线性插值、图像关系重采样、立方插值
dst = cv2.resize(img,(dstHeight,dstWidth))
cv2.imshow('dst',dst)
cv2.waitKey(0)

运行结果如下:
在这里插入图片描述
在这里插入图片描述
最近领域插值:
例如:原图像的大小为1020,目标图像的大小为510
新领域的X = X * (原图像的X / 目标图像的X) = X * (10/5)
新领域的Y = Y * (原图像的Y / 目标图像的Y) = Y * (20/10)
若X或Y为小数,则保留整数部分即可

双线性插值:
A1 = 20% 上+80%下 A2
B1 = 30% 左+70%右 B2
方法一: 最终点 = A1 30% + A2 70%
方法二: 最终点 = B1 20% + B2 80%
在这里插入图片描述
步骤:
1,获取图片info信息,包含宽度、高度等信息
2,创建一个和缩放之后大小一样的空白模板
3,计算每个缩放过后的X和Y值

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/zyl.png',1)
imgInfo = img.shape
height = imgInfo[0]#原图像的高度
width = imgInfo[1]#原图像的宽度
dstHeight = int(height/2)#目标图像的高度
dstWidth = int(width/2)#目标图像的宽度#创建空白模板
dstImage = np.zeros((dstHeight,dstWidth,3),np.uint8)#空白模板和目标图像的大小一样,uint8的范围为0-255#计算每个缩放过后的X和Y值
for i in range(0,dstHeight):#目标高度对应的是行for j in range(0,dstWidth):#目标宽度对应的是列iNew = int(i*(height*1.0/dstHeight))jNew = int(j*(width*1.0/dstWidth))dstImage[i,j] = img[iNew,jNew]cv2.imshow('dstImage',dstImage)
cv2.waitKey(0)

二、图片剪切

其实就算通过切片对图片截取而已

#剪切图片X坐标的100-200;Y坐标的200-300这部分的图片
import cv2
img = cv2.imread('E:\Jupyter_workspace\study\data/zyl.png',1)
imgInfo = img.shape
dst = img[100:200,200:300]
cv2.imshow('dst',dst)
cv2.waitKey(0)

三、图片位移

放射方法:
cv2.warpAffine(img,matShift,(height,width))
参数一:图片信息
参数二:当前的旋转矩阵
参数三:展示最终图片的宽高信息

API形式warpAffine仿射变换方法—左移100,右移200

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]matShift = np.float32([[1,0,100],[0,1,200]])
dst = cv2.warpAffine(img,matShift,(height,width))cv2.imshow('dst',dst)
cv2.waitKey(0)

源码形式—右移100

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
cv2.imshow('src',img)
imgInfo = img.shape
dst = np.zeros(img.shape,np.uint8)
height = imgInfo[0]
width = imgInfo[1]for i in range(0,height):for j in range(0,width-100):dst[i,j+100] = img[i,j]
cv2.imshow('img',dst)
cv2.waitKey(0)

[1,0,100],[0,1,200]分为22和21两个矩阵对待
[[1,0],[0,1]] 2 * 2 A
[[100],[200]] 2 * 1 B
[x,y] C
A * C + B = [[1 * x + 0 * y],[0 * x + 1 * y]]+[[100],[200]]= [[x+100],[y+200]]
(10,20)->(110,220)

四、图片镜像

实现步骤:
1,创建一个足够大的“画板”
2,将一幅图像分别从前向后、从后向前绘制
3,绘制中心分割线

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
cv2.imshow('img',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]newImgInfo = (height*2,width,deep)#定义空白模板,为了存储图片镜像
dst = np.zeros(newImgInfo,np.uint8)for i in range(0,height):for j in range(0,width):dst[i,j] = img[i,j]#上半部分#下半部分,x值不变,y值变成了整个高度的两倍-当前y-1 即 y=2*h-y+1#x为横坐标表示宽度信息,y为纵坐标表示高度信息#x对应j,y对应idst[height*2-i-1,j] = img[i,j]for i in range(0,width):dst[height,i] = (0,0,255)#(B,G,R),给条红线以示区分cv2.imshow('dst',dst)
cv2.waitKey(0)

效果如图下:
在这里插入图片描述
在这里插入图片描述

五、图片缩放

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
matScale = np.float32([[0.5,0,0],[0,0.5,0]])
dst = cv2.warpAffine(img,matScale,(int(width/2),int(height/2)))
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

六、仿射变换

位移、旋转、缩放
矩阵仿射变换基本算法原理:给三个点,确定整个图片的位置

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
cv2.imshow('img',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]matSrc = np.float32([[0,0],[0,height-1],[width-1,0]])
matDst = np.float32([[50,50],[300,height-200],[width-300,100]])matAffine = cv2.getAffineTransform(matSrc,matDst)
dst = cv2.warpAffine(img,matAffine,(width,height))cv2.imshow('dst',dst)
cv2.waitKey(0)

在这里插入图片描述

七、图片旋转

旋转矩阵方法:
cv2.getRotationMatrix2D((height*0.5,width*0.5),45,1)
参数一:旋转的中心点
参数二:旋转角度
参数三:缩放系数[0,1],1表示不缩放,容易出格,一般设置为0.5

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]matRotate = cv2.getRotationMatrix2D((height*0.5,width*0.5),45,0.5)
#matRotate = cv2.getRotationMatrix2D((height*0.5,width*0.5),45,1)dst = cv2.warpAffine(img,matRotate,(height,width))
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378586.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c ++查找字符串_C ++数组| 查找输出程序| 套装5

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>using namespace std;int main(){char* STR[] { "HELLO", "HIII", "RAM", "SHYAM", "MOHAN" };cout << (*STR 2)[2];return 0;}Output: 输出&…

MSSQL 链接Oracle 表

在Oracle中&#xff0c;要访问远程的另外一台数据库的话&#xff0c;是建立DBlink的方式。 在MSSQL中&#xff0c;则是以建立“link server 链接服务器”来远程访问另外一台数据库。 现在从MSSQL 2005访问Oracle的scott.dept。 首先&#xff0c;安装Oracle的客户端PLSQL DEVELO…

SQL Server 2008 高可用性视频(四)-- 故障转移群集

做数据库的朋友都知道, 其实数据库的工作大致可以分为三类: 数据库设计与开发, 数据库管理, 数据库商业智能. 其中数据库管理的工作大部分是由DBA在做, DBA们除了要保证正常的数据库运行, 还要采取必要措施提升数据库的性能, 比如数据库的性能优化, 以及保证数据库系统的高可用…

php 虚拟空间,什么是php虚拟主机?

什么是php虚拟主机&#xff1f;什么是php虚拟主机Php虚拟主机简单来说就是支持php语言开发的虚拟主机&#xff0c;我们把它称为php虚拟主机。php虚拟主机的工作原理Php是一种html嵌入式的语言&#xff0c;是一种在服务器端执行的嵌入html文档的脚本语言&#xff0c;类似于c语言…

C++---肿瘤面积

【问题描述】 在一个正方形的灰度图片上&#xff0c;肿瘤是一块矩形的区域&#xff0c;肿瘤的边缘所在的像素点在图片 中用 0 表示。其它肿瘤内和肿瘤外的点都用 255 表示。现在要求你编写一个程序&#xff0c;计算肿瘤内部的像素点的个数&#xff08;不包括肿瘤边缘上的点&am…

微机原理——8086中断类型以及中断向量表、中断响应、中断返回

博主联系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里会有往届的smarters和电赛选手&#xff0c;群里也会不时分享一些有用的资料&#xff0c;有问题可以在群里多问问。 目录先验知识回顾控制寄存器回顾1、8086中断类型1、外部可屏蔽中断2、外部不可屏蔽…

著名开源项目_著名开源项目案例研究

著名开源项目维基百科 (Wikipedia) Wikipedia is no less than an encyclopedia available free of cost to the public nowadays. If you want to write a passage, know about some famous person or thing you are just one click away from your desired article. 维基百科…

资料整理-工具篇

* 代码利器 Resharper 作为一个C#er&#xff0c;非常感谢有Resharper这样的代码利器。在VS系列的IDE中&#xff0c;使用Resharper后&#xff0c;你会发现&#xff0c;原来写代码也可以是一种享受&#xff01; 1. 首先&#xff0c;下载Resharper。下载地址&#xff1a;http://ww…

企业级php第三方支付平台,ThinkPHP新版企业级php第三方api第四方支付平台程序源码商业版 带接口文件等 某宝售价3000元...

本帖最后由 商业源码网 于 2017-12-21 11:23 编辑7 h$ . , C u0 R3 R y$ z! ] q( D D$ s( Y源码说明&#xff1a;) G: y; R# G0 0 g N. ; \0 w, A9 {5 # P今天黑锐给大家分享给好东西&#xff01;很不错的支付系统&#xff01;喜欢研究支付接口的朋友别错过&#xff01;ThinkP…

C++---两数之和

【问题描述】 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 【输入形…

C++语法:构造函数以及析构函数

目录定义主要特点C的构造函数定义格式示例1&#xff1a;不带参数的构造函数示例2&#xff1a;带参数的构造函数示例3&#xff1a;使用初始化列表来初始化字段类的析构函数定义 构造函数 &#xff0c;是一种特殊的方法。主要用来在创建对象时初始化对象&#xff0c; 即为对象成…

大学各系男生追MM的专业短信

环卫系 天气预报&#xff1a;今天凌晨到白天有时有想你&#xff0c;下午转大到暴想&#xff0c;预计心情将由此降低五度。受延长低气压带影响&#xff0c;预计此类天气将持续到见到你为止。 历史系 据说最早的爱情诗是这样写的&#xff1a;你来自云南元谋&#xff0c;我来自北京…

scala中命名参数函数_Scala中带有命名参数的函数

scala中命名参数函数具有命名参数的函数 (Functions with named arguments ) A function is Scala can take multiple arguments. These arguments are traditionally called in sequence while calling a function. But in Scala programming, the program is given the power…

【IT笔试面试题整理】 二叉树任意两个节点间最大距离

求一个二叉树中任意两个节点间的最大距离&#xff0c;两个节点的距离的定义是这两个节点间边的个数&#xff0c; 比如某个孩子节点和父节点间的距离是1&#xff0c;和相邻兄弟节点间的距离是2&#xff0c;优化时间空间复杂度。 一种是&#xff1a;经过根节点&#xff0c;此时只…

请问染色浴比对染色性能有影响吗?浴比对染色的哪些性能有影响?染色亲和力测定有哪些实际应用意义

2.6 染色热力学参数 染色热、染色熵测定方法 请问染色浴比对染色性能有影响吗&#xff1f;浴比对染色的哪些性能有影响&#xff1f;染色亲和力测定有哪些实际应用意义&#xff1f; 答&#xff1a;浴比&#xff0c;又称液比。指纺织品与染液等的重量比例&#xff0c;即被染物重…

php排序地区,怎么在php项目中实现一个地区分类排序算法

怎么在php项目中实现一个地区分类排序算法发布时间&#xff1a;2020-12-30 16:11:30来源&#xff1a;亿速云阅读&#xff1a;86作者&#xff1a;Leah怎么在php项目中实现一个地区分类排序算法&#xff1f;相信很多没有经验的人对此束手无策&#xff0c;为此本文总结了问题出现的…

OpenCV实战【2】HOG+SVM实现行人检测

目录HOG是什么&#xff1f;HOG vs SIFTHOG步骤HOG在检测行人中的方式Opencv实现HOGDescriptor的构造函数&#xff1a;行人检测HOGSVM步骤简化版的HOG计算HOG是什么&#xff1f; 方向梯度直方图( Histogram of Oriented Gradient, HOG )特征是一种在计算机视觉和图像处理中用来进…

wchar_t 和 char

#include <windows.h> #include <stdio.h> //function: charTowchar //purpose:char to WCHAR 、wchar_t、LPWSTR etc void charTowchar(const char *chr, wchar_t *wchar, int size) { MultiByteToWideChar( CP_ACP, 0, chr, strlen(chr)…

坐标转换 计算机图形学_计算机图形学的转换类型

坐标转换 计算机图形学什么是转型&#xff1f; (What is Transformation?) Transformation refers to the mathematical operations or rules that are applied on a graphical image consisting of the number of lines, circles, and ellipses to change its size, shape, o…

win2003 IIS6配置PHP 5.3.3(fastCGI方式+eAccelerator)+ASP.NET 4.0(MVC3)

win2003 IIS6配置PHP 5.3.3(fastCGI方式eAccelerator)ASP.NET 4.0(MVC3) 直入正题。 这个环境的部署很有讲究&#xff0c;折腾了一天&#xff0c;大概说一下思路&#xff1a; 自从哪个PHP的版本开始&#xff08;5.2也不知道多少&#xff09;&#xff0c;就分了thread-safe版和n…