OpenCV入门6——图像基本变换

文章目录

  • 图像的放大与缩小
    • 缩放算法
    • 放大
  • 图像的翻转
  • 图像的旋转
  • 仿射变换之图像平移
  • 仿射变换之获取变换矩阵
  • 仿射变换之变换矩阵之二
  • OpenCV透视变换

图像的放大与缩小

在这里插入图片描述

缩放算法

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//4.jpg')
# (600, 480, 3)new_img = cv2.resize(img, (300, 240))
new_img2 = cv2.resize(img, (300, 240), interpolation=cv2.INTER_AREA)cv2.imshow('new_img', new_img)
cv2.imshow('img', img)
cv2.imshow('new_img2', new_img2)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//4.jpg')
# (600, 480, 3)new_img = cv2.resize(img, None, fx=0.3, fy=0.3)
new_img2 = cv2.resize(img, (300, 240), interpolation=cv2.INTER_AREA)cv2.imshow('new_img', new_img)
cv2.imshow('img', img)
cv2.imshow('new_img2', new_img2)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

放大

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//4.jpg')
# (600, 480, 3)new_img = cv2.resize(img, None, fx=1.3, fy=1.3)
new_img2 = cv2.resize(img, (300, 240), interpolation=cv2.INTER_AREA)cv2.imshow('new_img', new_img)
cv2.imshow('img', img)
cv2.imshow('new_img2', new_img2)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

图像的翻转

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//4.jpg')
# 上下翻转
img2 = cv2.flip(img, 0)
# 左右翻转
img3 = cv2.flip(img, 1)
# 上下左右翻转
img4 = cv2.flip(img, -1)cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.imshow('img4', img4)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

图像的旋转

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//4.jpg')img2 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
img3 = cv2.rotate(img, cv2.ROTATE_180)
img4 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.imshow('img4', img4)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

仿射变换之图像平移

详细见官方文档
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一行的第三列是x轴偏移量,第二行第三列是y轴偏移量

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//4.jpg')
w, h, ch = img.shape
M = np.float32([[1, 0, 100], [0, 1, 20]])img2 = cv2.warpAffine(img, M, (h, w))cv2.imshow('img', img)
cv2.imshow('img2', img2)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

仿射变换之获取变换矩阵

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//10.jpg')
w, h, ch = img.shape
# M = np.float32([[1, 0, 100], [0, 1, 20]])# 旋转的角度为逆时针
M = cv2.getRotationMatrix2D((100, 100), 30, 1)
M2 = cv2.getRotationMatrix2D((h / 2, w / 2), 60, 0.6)# 如果想改变新图像尺寸,需修改dsize
img2 = cv2.warpAffine(img, M, (h, w))
img3 = cv2.warpAffine(img, M2, (h, w))cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

仿射变换之变换矩阵之二

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//10.jpg')
w, h, ch = img.shape
# M = np.float32([[1, 0, 100], [0, 1, 20]])# 旋转的角度为逆时针
# M = cv2.getRotationMatrix2D((100, 100), 30, 1)
# M2 = cv2.getRotationMatrix2D((h / 2, w / 2), 60, 0.6)src = np.float32([[100, 200], [300, 200], [100, 400]])
dst = np.float32([[50, 100], [200, 400], [90, 300]])M = cv2.getAffineTransform(src, dst)# 如果想改变新图像尺寸,需修改dsize
img2 = cv2.warpAffine(img, M, (h, w))
# img3 = cv2.warpAffine(img, M2, (h, w))cv2.imshow('img', img)
cv2.imshow('img2', img2)
# cv2.imshow('img3', img3)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//10.jpg')
w, h, ch = img.shape
# M = np.float32([[1, 0, 100], [0, 1, 20]])# 旋转的角度为逆时针
# M = cv2.getRotationMatrix2D((100, 100), 30, 1)
# M2 = cv2.getRotationMatrix2D((h / 2, w / 2), 60, 0.6)src = np.float32([[100, 200], [300, 200], [100, 400]])
dst = np.float32([[50, 100], [200, 400], [60, 500]])M = cv2.getAffineTransform(src, dst)# 如果想改变新图像尺寸,需修改dsize
img2 = cv2.warpAffine(img, M, (h, w))
# img3 = cv2.warpAffine(img, M2, (h, w))cv2.imshow('img', img)
cv2.imshow('img2', img2)
# cv2.imshow('img3', img3)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

OpenCV透视变换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npcv2.namedWindow('img', cv2.WINDOW_NORMAL)
cv2.namedWindow('img2', cv2.WINDOW_NORMAL)
img = cv2.imread('perspective.jpeg')src = np.float32([[100, 1000], [2100, 1000], [0, 4000], [2500, 3900]])
dst = np.float32([[0, 0], [2300, 0], [0, 3000], [2300, 3000]])
M = cv2.getPerspectiveTransform(src, dst)img2 = cv2.warpPerspective(img, M, (2300, 3000))cv2.imshow('img', img)
cv2.imshow('img2', img2)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

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

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

相关文章

Pandas的fillna()填充空值

0.摘要 pandas中fillna()方法,能够使用指定的方法填充NA/NaN值。 1.函数详解 函数形式:fillna(valueNone, methodNone, axisNone, inplaceFalse, limitNone, downcastNone, **kwargs) 参数: value:用于填充的空值的值。 met…

时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM)

时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM) 目录 时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM)预测效果基本介绍程序设计参考资料预测效果 基本介绍 时序预测 | Python实现ConvLSTM卷积长短期记忆神…

atsec at the PCI Community Meeting 2023

atsec participated in the PCI (Payment Card Industry) Security Standards Council 2023 Asia-Pacific Community Meeting held in Kuala Lumpur, Malaysia, on 15 and 16 November and hosted a booth. atsec’s principal consultant Di Li provided a presentation on “…

学习笔记5——对象、直接内存、执行引擎,string

学习笔记系列开头惯例发布一些寻亲消息 链接:https://baobeihuijia.com/bbhj/contents/3/192486.html 创建对象的步骤 对象对应的类是否被加载,链接(链接到真实的内存地址),初始化(类初始化)…

回顾——自我监督的 Vision Transformer 学到了什么?

一、说明 在尝试自我监督学习时,主要有两种方法:对比学习(CL)和掩模图像建模(MIM)。然而,随着MIM最近受到关注,很多人使用MIM,但他们可能不知道为什么使用它以及何时应该…

ython 的 http.client 和 python-requests 性能差异分析与优化

在Python中,有两个常用的HTTP库,分别是http.client和python-requests。。 社区成员Lukasa提出了一个可能的原因,即python-requests可能没有正确缓存主机名查找。这个问题涉及到了底层的网络操作,因为Python-requests实际上是在ht…

opencv(2): 视频采集和录制

视频采集 相关API VideoCapture()cap.read(): 返回两个值,第一个参数,如果读到frame,返回 True. 第二个参数为相应的图像帧。cap.release() VideoCapture cv2.VideoCapture(0) 0 表示自动检测,如果在笔记本上运行&…

PCL 提取点云边界轮廓-AC方法、平面轮廓

一、概述 PCL点云边界特征检测 (附完整代码 C)_pcl计算点云特征值_McQueen_LT的博客-CSDN博客 在点云的边界特征检测(网格模型的边界特征检测已经是一个确定性问题了,见 网格模型边界检测)方面,PCL中有一…

「Verilog学习笔记」用3-8译码器实现全减器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 首先列出3-8译码器和全减器的真值表 全减器真值表如下 3-8译码器真值表如下 timescale 1ns/1nsmodule decoder_38(input E ,input A0 …

这几个站点,有点优秀

中国大学慕课网 网址:https://www.icourse163.org/ 大学生们这个白嫖网站咱一定不能错过,与全国801所高效合作,里面都是不同专业的精品课程,关键是它们都是免费的!报名学习,就等着知识装满脑袋吧&#xff0…

leetcode算法之位运算

目录 1.判断字符是否唯一2.丢失的数字3.两整数之和4.只出现一次的数字II5.消失的两个数字6.位1的个数7.比特位计数8.汉明距离 1.判断字符是否唯一 判断字符是否唯一 class Solution { public:bool isUnique(string astr) {//利用鸽巢原理做优化if(astr.size()>26) return…

1694. 重新格式化电话号码

1694. 重新格式化电话号码 Java&#xff1a;while 切糖果 class Solution {public String reformatNumber(String number) {StringBuilder sb new StringBuilder();for (int i 0; i < number.length(); i) {char ch number.charAt(i);if (Character.isDigit(ch)) {sb.a…