Opencv学习笔记(4)
进一步学习灵活的操作!
1、图像的旋转和平移
旋转和平移都是借助cv2.warpAffine()函数实现的,其区别是转换矩阵M的不同。
旋转利用cv2.getRotationMatrix2D()函数构造旋转矩阵,平移矩阵利用二维数组构建。
语法:cv2.warpAffine(src, M, desize, dst, flags, borderMode, borderValue)
其中,src------源图像,M------转换矩阵
desize------tuple类型参数。目标图像的宽高,即新的图像宽高(新的图像可能包含部分或者全部变换后的图像,其他区域一般由黑色像素填充)。
dst------目标图像,在python中无任何意义,一般不传参或设成None。
flags---插值方法。cv2.INTER_NEAREST,最近邻插值;cv2.INTER_LINEAR,线性插值(默认值);cv2.INTER_AREA,区域插值;cv2.INTER_CUBIC,三次样条插值等。
borderMode ------边界像素模式
borderValue ------边界填充值(即显示框内图像之外的区域),默认值为0.
旋转矩阵的构造:
语法:cv2.getRotationMatrix2D( center , angel , scale )
参数:center ------图像的旋转中心,是一元祖类型的参数。即在图像构建的坐标系中选取旋转中心。
angle ------ 旋转角度(角度制),正负值遵循坐标系角度规则。
scale ------ 图像的缩放比例因子。
平移矩阵的构造
语法:构造数组,2Darray = np.ndarray([[1,0,tx],[0,1,ty]])
参数:tx ------正值,图像将右移[tx]个像素;负值,将向左移[ tx]个像素。
ty ------正值,图像将下降[ty]个像素;负值,将向上移[ty]个像素。
平移矩阵,M = 2Darray
相关例子:
1 import cv2
2 import numpy as np
3
4 car = cv2.imread('car.png')
5 print(car.shape)
6 height, width = car.shape[:2]
7
8 # 旋转图像
9 center = (width/3 , height/10)
10 rotate_matrix = cv2.getRotationMatrix2D(center, -15, scale = 1.2)
11 rotate_car = cv2.warpAffine(car, rotate_matrix, dsize = (500,300))
12
13 # 原图像以坐标(width/3 , heigjht/10)为旋转中心旋转-15度然后再缩放1.2倍
14
15 cv2.imshow('original_imag',car)
16 cv2.imshow('rotate',rotate_car)
17 cv2.waitKey(0)
18 cv2.destroyAllWindows()

1 import cv2
2 import numpy as np
3
4 car = cv2.imread('car.png')
5 print(car.shape)
6 height, width = car.shape[:2]
7
8 #平移图像
9 tx, ty = width/5, -height/5
10 translation_matrix = np.array([[1,0,tx], [0,1,ty]])
11 translation_car = cv2.warpAffine(car,translation_matrix,dsize=(500,300))
12 cv2.imshow('original_img',car)
13 cv2.imshow('translation_car',translation_car)
14 cv2.waitKey(0)
15 cv2.destroyAllWindows()

2、图像翻转
图像翻转,也就是通常所说的镜像。主要包括垂直翻转、水平翻转、水平垂直翻转。
语法:cv2.flip( src, flipCode)
src ------ 源图像
flipCode ------ 翻转方式。 flipCode == 0 , 垂直翻转(沿x轴翻转)
flipCode > 0 , 水平翻转(沿y轴翻转)
flipCode < 0 , 水平垂直翻转(先沿X轴翻转,再沿Y轴翻转,等价于旋转180°)
1 import cv2
2 import numpy as np
3
4 car = cv2.imread('car.png')
5 # 翻转图像
6 flip_cat1 = cv2.flip(car, flipCode=0)
7 flip_cat2 = cv2.flip(car, flipCode=1)
8 flip_cat3 = cv2.flip(car, flipCode=-1)
9
10 combined = np.hstack((car,flip_cat1,flip_cat2,flip_cat3))
11 cv2.imshow('combined',combined)
12 cv2.waitKey(0)
13 cv2.destroyAllWindows()

Opencv学习笔记(4)的更多相关文章
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- opencv学习笔记(五)镜像对称
opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...
- opencv学习笔记(四)投影
opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- opencv学习笔记(二)寻找轮廓
opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- paper 93:OpenCV学习笔记大集锦
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
首页 视界智尚 算法技术 每日技术 来打我呀 注册 OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...
随机推荐
- JavaWeb 中的 HTTP 基础知识
概念:超文本传输协议,规定了浏览器和服务器之间数据传输的规则. 特点: 基于TCP协议,面向连接,更安全 基于请求-响应模型,一次请求对应一次响应 是无状态的协议,对事务处理没有记忆能力.每次请求-响 ...
- tomcat为什么假死了.md
现象 我们生产最近有个服务偶尔会挂掉,接口报错"connection reset by peer",上服务器curl也是同样报错,意思连接被server拒绝了. 通过dump以及日 ...
- 建发弘爱 X 袋鼠云:加速提升精细化、数字化医疗健康服务能力
厦门建发弘爱医疗集团有限公司(简称"建发弘爱")创立于2022年,是厦门建发医疗健康投资有限公司的全资子公司,专业从事医疗健康领域的医疗服务. 建发弘爱通过医疗.健康及产业服务三大 ...
- Agent生命周期管理框架—EasyAgent正式开源啦
本文整理自:EasyAgent正式开源啦丨开源送"粽"礼 2018年,袋鼠云技术团队决定在技术社区上开源项目,为开源社区贡献力量. 同年FlinkX.FlinkStreamSQL相 ...
- SpringBooot3.4集成Swagger knife4j-openapi3 Knife4j文档请求异常
## Pom引入 SpringBooot3.4的版本 <dependency> <groupId>com.github.xiaoymin</groupId> < ...
- 可以安装成功的red5资源
找了好久,只有这个可用 https://download.csdn.net/download/haiwalt/8600781 注意下 RED5_HOME 路径是运行exe文件后 有个 D:\Re ...
- json\jquery入门
一)什么是JSON (1)JSON(Java Script Object Notation(记号,标记))是一种轻量级的数据交换语言, 以文本字符串为基础,且易于让人阅读 注意:XML就是一个重量级的 ...
- Spring AI 实现让你的 AI “三思而后行”
你是否遇到过这样的情况:精心设计的 AI 应用,在面对稍微复杂点的问题时,给出的答案却驴唇不对马嘴?感觉它好像"看了一眼就答",根本没仔细"阅读理解". 别急, ...
- 解决Dify的Ollama插件添加模型时保存成功但模型为空的问题
最近组里安排了点调研Dify任务.我跟着基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程一步一步走,前面都挺顺利,但在Dify的Ollama中引入大模型这一步卡住了 ...
- 【8】AC自动机学习笔记
前言 四大玄学玩意:SPFA,动态规划,组合数学,AC自动机. 前置知识: [5]KMP学习笔记 [6]字典树学习笔记 AC 自动机 给定 \(n\) 个模式串 \(s_i\) 和一个文本串 \(t\ ...