OpenCV实验(6):图像变形
实验要求:
实验思路:
1.从输出图像开始运算,按照公式计算即可。或参考其他文章
https://blog.csdn.net/qq_38137411/article/details/83213297
2.本实验代码中不包含任何循环,通过尽可能使用numpy加速使时间从4.6s下降到约0.076s。建议是根据代码弄清楚各个numpy矩阵的含义和形式,方便理解。
实验效果:
实验代码:
import numpy as np
import cv2 as cvdef anamorphic(imgSrc):"""根据实验要求的公式实现图像变形为了尽可能的减少运行时间,所有的循环和各种运算都尽可能地使用了Numpy,因此在该函数中不包含任何循环,时间从4.6s优化到了0.076s:param imgSrc: 输入图像:return: imgDst time 变形后的图像 时间"""timeBegin = cv.getTickCount() # 记录开始时间rows, cols, channels = imgSrc.shapecoordinateDst = np.zeros([rows, cols, 2]) # 储存输出图像中心归一化坐标coordinateSrc = np.zeros([rows, cols, 2]) # 储存输入图像中心归一化坐标coordinateFinal = np.zeros([rows, cols, 2]) # 储存输入图像的原坐标# 输出图像中心归一化coordinateDst[:, :, 1] = np.arange(cols)coordinateDst[:, :, 0] = np.arange(rows).reshape(-1, 1)coordinateDst = (coordinateDst - 0.5 * np.array([rows, cols])) / (0.5 * np.array([rows, cols]))# 实现映射r = np.sqrt(np.sum(coordinateDst ** 2, axis=2)) # 计算所有的rtheta = (1 - r) ** 2 # 计算所有的thetacoordinateSrc[:, :, 0] = np.cos(theta) * coordinateDst[:, :, 0] - np.sin(theta) * coordinateDst[:, :, 1]coordinateSrc[:, :, 1] = np.sin(theta) * coordinateDst[:, :, 0] + np.cos(theta) * coordinateDst[:, :, 1]# 计算r的掩码,此时的r的值只是为0和1r = np.expand_dims(r, 2).repeat(2, axis=2) # 先复制并扩充一个维度r[r < 1] = -1r[r >= 1] = 0r[r == -1] = 1coordinateFinal += np.multiply(r, coordinateSrc) # 对应于 f^-1 中的“otherwise”# 下面三句交换0 和 1r[r == 1] = -1r[r == 0] = 1r[r == -1] = 0coordinateFinal += np.multiply(r, coordinateDst) # 对应于 f^-1 中的“if r >= 1”coordinateFinal = (coordinateFinal + 1) * np.array([0.5*rows, 0.5*cols])coordinateFinal = coordinateFinal.astype(np.int) # 不能为np.uint8,可以试一试x = np.arange(rows).repeat(cols) # x 为 [0, 0, 0, ..., 2, 2, 2, ..., rows-1]y = np.tile(np.arange(cols), rows) # y 为 [0, 1, 2, ..., cols-1, 0, 1, 2, ...cols-1, ...]# imgDst为输出图像imgDst = imgSrc[coordinateFinal[x, y, 0], coordinateFinal[x, y, 1], :].reshape(rows, cols, channels)timeEnd = cv.getTickCount() # 记录结束时间time = (timeEnd - timeBegin) / cv.getTickFrequency() # 计算总时间return imgDst, time # 0.076 simgSrc = cv.imread('../images/images3_2/lab2.png')
imgDst, time = anamorphic(imgSrc)
cv.imshow('imgSrc', imgSrc)
cv.imshow('imgDst', imgDst)
print('Successful!!!')
print('time: %.4f s' % time)
cv.waitKey(0)
cv.destroyAllWindows()
OpenCV实验(6):图像变形相关推荐
- opencv mat release thrown_【OpenCV+Python】图像与视频处理入门
图像处理入门 之前我们已经讲过了OpenCV在各个平台上安装的方法了,从今天开始,正式进入实战部分.首先我们需要做的就是如何读取图像并显示出来,这是图像处理的最基本的部分. 首先我们来了解几个函数. ...
- python下:用 matplotlib.pyplot 显示 Opencv 读取的图像
在涉及图像处理时,我们通常用opencv去读取并处理图像,而用matplotlib去显示图像,因为opencv有很强的图像处理能力,而matplotlib有很强的可视化能力,可以方便的可视化分析实验的 ...
- 图像控制点 形变_基于控制点的图像变形方法的研究与实现
基于控制点的图像变形方法的研究与实现 林军 ; 李新华 [期刊名称] <北京电力高等专科学校学报 ( 自然科学版 ) > [年 ( 卷 ), 期] 2011(028)005 [摘要] 根据 ...
- 2020-2021学年——图像图形编程实践实验4_Canny图像边缘检测
Canny图像边缘检测 实验目的 了解并掌握使用微分算子进行图像边缘检测的基本原理: 了解Canny边缘检测原理与实现,进一步理解图像锐化的实质. 实验设备 PC机.matlab2018b 实验原理 ...
- OpenCV实验(一):砖块的检测与位姿估计,窗户的检测与位姿估计
本次实验包含两个题目 砖块的检测与位姿估计 窗户的检测与位姿估计 2019-4-28更新: 针对4类RGB-D数据,已将深度数据和可见光数据进行对齐 给出数据读取的代码demo 给出相机的内参信息 注 ...
- Python,OpenCV中的图像修复——cv2.inpaint()
Python,OpenCV中的图像修复--cv2.inpaint 1. 效果图 2. 原理 3. 源码 参考 image inpainting 图像修改 这篇博客将介绍如何通过OpenCV中图像修复的 ...
- OpenCV 【十二】OpenCV如何扫描图像、利用查找表和计时
目录 OpenCV如何扫描图像.利用查找表和计时 1.函数计算时间测试case 2. Mat图像的存储机理 3. 像素遍历的3--4种方式 4. 实例 OpenCV如何扫描图像.利用查找表和计时 如何 ...
- 解密 | OpenCV加载图像大小是有限制的 ?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 问题来由 最近有人问一个问题,就是它有个大小800MB的图像文件, ...
- python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化
python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...
最新文章
- GNU make manual 翻译( 一百二十一)
- Py之pixellib:pixellib库的简介、安装、经典案例之详细攻略
- mysql 常用数据库连接池_常见的数据库连接池
- 电脑小写字母怎么切换_苹果电脑双系统如何切换?苹果电脑双系统切换方法
- pythongui界面实例_wxPython:python首选的GUI库实例分享(5)
- Python求1~300之间所有的完数
- tx2使用远程开机后分辨率不正确
- 厦门大学847信号与系统考研参考书目
- 计算机教室电气设计规范,车库电气设计规范.docx
- UniBeast:在任何支持基于英特尔处理器的PC上安装OS X优胜美地
- iOS-性能优化的那些事
- java 二维向量_二维向量的叉积是标量还是向量?
- 产品专利和方法专利对比分析
- Thinkpad E430 移除网卡白名单
- 我的理想200字计算机工程师,我的理想工程师作文(我的理想是做一名工程师)...
- 微信怎么收银行卡的消息服务器,微信零钱提现,这样操作,可以免去手续费
- 回顾一年的工作历程_回顾历程、总结经验、展望未来
- 新手看过来----讨厌的运算符
- 民法典实施后,夫妻共同债务如何认定?
- 微型计算机不可少,[单选] 微型计算机中必不可少的输入和输出设备是()。