2剪切移位镜像反射旋转
图片处理
一、图片缩放
最近临域插值 双线性插值 原理
- src(原图像) 1020 dst(目标图片) 510
- 可以用原图像上的点src表示目标图像上的点dst
#例如:原图像的点(2,4)表示目标图像的点(1,2) - 知道目标图像(x,y)如何计算原图像的(x,y)?公式
#newx=x*(src行/目标行) 例如:newx=1*(10/5)=2
#newy=y*(src列/目标列) 例如:newy=2*(20/10)=4 - 计算出是小数12.3取12 -->最近邻域插值法(取最近的)
#比如有一个点(15.2,22.3)–>(15,22)(最近邻域插值法)
双线插值法:(API中resize()方法就是实现了该方法)
- 双线性插值
A1 = 20% 上+80%下 A2
B1 = 30% 左+70%右 B2
1 最终点 = A1 30% + A2 70%
2 最终点 = B1 20% + B2 80% - 实质:矩阵运算
代码实现
# 1 info获取图片宽度高度等 2 创建空白模版 3 计算缩放后像素点x y
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1) # 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) #目标模板 3个基本元素 np.uint8 0-255
# 循环遍历图片 到目标高度和宽度结束
for i in range(0,dstHeight): #行for j in range(0,dstWidth): #列 iNew = int(i*(height*1.0/dstHeight)) #强制转化 计算新的ijNew = int(j*(width*1.0/dstWidth))dstImage[i,j] = img[iNew,jNew] #目标图像i j 为计算所得的i j
cv2.imshow('dst',dstImage)
cv2.waitKey(0)
# 实现方法1 opencv API resize 2 算法原理 3 自己实现源码
问题
AttributeError: ‘NoneType’ object has no attribute 'shape’
原因
找不到这个image0图片,检查image0是否在当前目录
二、图片剪切
#100 -》200 x
#100-》300 y
import cv2
img = cv2.imread('image0.jpg',1)#1彩色
imgInfo = img.shape
dst = img[100:200,100:300]
cv2.imshow('image',dst)
cv2.waitKey(0)
三、图片移位
# 1 API 2 算法原理 3 源代码
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
####
matShift = np.float32([[1,0,100],[0,1,200]])# 2行*3列
dst = cv2.warpAffine(img,matShift,(height,width))#1 data 2 mat 3 info
# 移位 矩阵
cv2.imshow('dst',dst)
cv2.waitKey(0)
- 原理
API原理
# [1,0,100],[0,1,200] 2*2 2*1
# [[1,0],[0,1]] 2*2 A
# [[100],[200]] 2*1 B
# 新xy C
此处传入的是一个2*3的矩阵的原理:
其中将其拆分为一个2*2与一个2*1的矩阵
[[1,0],[0,1]]->A(前两位)
[[100],[200]]->B(最后一位)
其中原来图像x,y->C
根据公式A*C+B得到移动后的坐标
计算公式:A*C+B = [[1*x+0*y],[0*x+1*y]]+[[100],[200]]
运算结果: [[x+100],[y+200]] 这就是原来x,y移动后的坐标
像素
#(10,20)->映射后为(110,120)
- 代码实现
#源码实现移动
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
dst = np.zeros(img.shape,np.uint8) # 新定义矩阵 1 维度 2 图片数据类型0-255
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('image',dst)
cv2.waitKey(0)
四、图片镜像
# 图片镜像
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2] #深度
newImgInfo = (height*2,width,deep)
dst = np.zeros(newImgInfo,np.uint8) # 某种的数据类型 必须 np.uint8
for i in range(0,height):for j in range(0,width):dst[i,j] = img[i,j] # 上半部分#x y = 2*h - y -1dst[height*2-i-1,j] = img[i,j] # 下半部分
for i in range(0,width): #范围 0-整个图片宽度dst[height,i] = (0,0,255) #BGR 分割线
cv2.imshow('dst',dst)
cv2.waitKey(0)
五、图片仿射
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
#通过原图点的拉伸,三点一个平面 src 3->dst 3 (左上角 左下角 右上角)
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)# 仿射变换矩阵mat 1 src 2 dst
dst = cv2.warpAffine(img,matAffine,(width,height)) #仿射变换方法
cv2.imshow('dst',dst)
cv2.waitKey(0)
六、图片旋转
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
# 旋转矩阵2*3
matRotate = cv2.getRotationMatrix2D((height*0.5,width*0.5),45,1)# mat rotate 1 center 2 角度angle 3 为了便于展示要缩放系数scale
#100*100 25
dst = cv2.warpAffine(img,matRotate,(height,width))
cv2.imshow('dst',dst)
cv2.waitKey(0)
ix2D((height0.5,width0.5),45,1)# mat rotate 1 center 2 角度angle 3 为了便于展示要缩放系数scale
#100*100 25
dst = cv2.warpAffine(img,matRotate,(height,width))
cv2.imshow(‘dst’,dst)
cv2.waitKey(0)
2剪切移位镜像反射旋转相关推荐
- STM32F103xx TFT液晶显示ASCII字符串、中文、图片并且显示带有镜像和旋转功能
STM32F103xx TFT液晶显示ASCII字符串.中文.图片带有镜像和旋转功能 编译器平台及例程说明 编译器说明 例程说明 参考例程 一.镜像显示说明 二.旋转显示说明 三.数据结构和宏定义 四 ...
- C++数据结构 矩阵的转置、镜像及旋转
C++数据结构 矩阵的转置.镜像及旋转 矩阵介绍 C++ 中的矩阵是一种二维数组,用于存储数值数据.矩阵可以用于存储图像数据,以及科学和工程计算中的数据. 常用于以下场景: 数学运算:矩阵乘法.行列式 ...
- 计算机图形学(三)-图形学中的基本变换(缩放、平移、旋转、剪切、镜像)
图形学中的基本变换 1. 二维变换 1.1 缩放变换 1.2.镜像变换 1.3 剪切变换 1.4 旋转变换 1.5 平移变换 1.5.1 什么是线性变换 1.5.2 平移变换(仿射变换) 1.5.3 ...
- MFC空间几何变换之图像平移、镜像、旋转、缩放
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形 ...
- C#图片处理 解决左右镜像相反(旋转图片)
/// <summary>/// aforge摄像框控件:捕捉识别绘制人脸框/// </summary>/// <param name="sender" ...
- 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形 ...
- 图像几何变换--缩放、平移、镜像、旋转
目录 一.图像几何变换基础 二.平移 三.缩放 四.旋转 五.镜像 六.复合变换 七.变换矩阵总结 八.完整代码 一.图像几何变换基础 1.图像的几何变换是指原始图像按照需要产生大小.形状和位置的变化 ...
- 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放具体解释...
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说,主要通过MFC单文档视图实现显示BMP图片空间几何变换.包含 ...
- 图像几何变换C++实现--镜像,平移,旋转,错切,缩放
一.图像几何变换介绍 图像的几何空间变换是图像处理中的最基础的算法,是指对原始图像按需要改变其大小.形状和位置的变化,原始图像与目标函数之间的坐标变换函数为线性函数.二维图像的基本几何变换主要包括镜像 ...
最新文章
- Spring思维导图(MVC篇)
- 一个面试官对JVM面试问题的分析
- Python学习总结18:函数 参数篇
- 物理史2000年来最豪华阵容也是最为精彩的对决!
- 北京小学 计算机派位,北京小升初电脑派位原理详解!和对口直升入学有什么区别?...
- AW_blog 在任意页设置文章的数量
- ssh整合(spring + struts2 + hibernate)xml版
- MODBUS调试工具 C#源码 包含MODBUS主站调试工具和MODBUS从站调试工具
- homebre mysql 启动_Mysql闪退问题图文解决办法
- 說說俺的FTP Server服務器
- LabVIEW编程LabVIEW控制MMC-100位移台例程与相关资料
- 苹果尝试支持AdobeFlash,结果尴尬了
- 朋友圈点赞,微信发红包,视频的播放,Pc端微信加群,app端微信加群的测试点
- Ubuntu的软件包管理 || 软硬链接 ||进线程浅述
- js获取当前日期农历
- 我的“天气宝”上线啦
- java判定文件名邮箱名正确
- DC综合基本概念-timing rpt issue: reset, set
- 腾讯大数据之 TDW 计算引擎解析——Shuffle
- cpuz检测硬件真假_傅里叶红外光谱仪法沥青分析检测方案