图片处理

一、图片缩放

最近临域插值 双线性插值 原理

  • 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剪切移位镜像反射旋转相关推荐

  1. STM32F103xx TFT液晶显示ASCII字符串、中文、图片并且显示带有镜像和旋转功能

    STM32F103xx TFT液晶显示ASCII字符串.中文.图片带有镜像和旋转功能 编译器平台及例程说明 编译器说明 例程说明 参考例程 一.镜像显示说明 二.旋转显示说明 三.数据结构和宏定义 四 ...

  2. C++数据结构 矩阵的转置、镜像及旋转

    C++数据结构 矩阵的转置.镜像及旋转 矩阵介绍 C++ 中的矩阵是一种二维数组,用于存储数值数据.矩阵可以用于存储图像数据,以及科学和工程计算中的数据. 常用于以下场景: 数学运算:矩阵乘法.行列式 ...

  3. 计算机图形学(三)-图形学中的基本变换(缩放、平移、旋转、剪切、镜像)

    图形学中的基本变换 1. 二维变换 1.1 缩放变换 1.2.镜像变换 1.3 剪切变换 1.4 旋转变换 1.5 平移变换 1.5.1 什么是线性变换 1.5.2 平移变换(仿射变换) 1.5.3 ...

  4. MFC空间几何变换之图像平移、镜像、旋转、缩放

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形 ...

  5. C#图片处理 解决左右镜像相反(旋转图片)

    /// <summary>/// aforge摄像框控件:捕捉识别绘制人脸框/// </summary>/// <param name="sender" ...

  6. 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形 ...

  7. 图像几何变换--缩放、平移、镜像、旋转

    目录 一.图像几何变换基础 二.平移 三.缩放 四.旋转 五.镜像 六.复合变换 七.变换矩阵总结 八.完整代码 一.图像几何变换基础 1.图像的几何变换是指原始图像按照需要产生大小.形状和位置的变化 ...

  8. 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放具体解释...

           本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说,主要通过MFC单文档视图实现显示BMP图片空间几何变换.包含 ...

  9. 图像几何变换C++实现--镜像,平移,旋转,错切,缩放

    一.图像几何变换介绍 图像的几何空间变换是图像处理中的最基础的算法,是指对原始图像按需要改变其大小.形状和位置的变化,原始图像与目标函数之间的坐标变换函数为线性函数.二维图像的基本几何变换主要包括镜像 ...

最新文章

  1. Spring思维导图(MVC篇)
  2. 一个面试官对JVM面试问题的分析
  3. Python学习总结18:函数 参数篇
  4. 物理史2000年来最豪华阵容也是最为精彩的对决!
  5. 北京小学 计算机派位,北京小升初电脑派位原理详解!和对口直升入学有什么区别?...
  6. AW_blog 在任意页设置文章的数量
  7. ssh整合(spring + struts2 + hibernate)xml版
  8. MODBUS调试工具 C#源码 包含MODBUS主站调试工具和MODBUS从站调试工具
  9. homebre mysql 启动_Mysql闪退问题图文解决办法
  10. 說說俺的FTP Server服務器
  11. LabVIEW编程LabVIEW控制MMC-100位移台例程与相关资料
  12. 苹果尝试支持AdobeFlash,结果尴尬了
  13. 朋友圈点赞,微信发红包,视频的播放,Pc端微信加群,app端微信加群的测试点
  14. Ubuntu的软件包管理 || 软硬链接 ||进线程浅述
  15. js获取当前日期农历
  16. 我的“天气宝”上线啦
  17. java判定文件名邮箱名正确
  18. DC综合基本概念-timing rpt issue: reset, set
  19. 腾讯大数据之 TDW 计算引擎解析——Shuffle
  20. cpuz检测硬件真假_傅里叶红外光谱仪法沥青分析检测方案

热门文章

  1. 斑马zpl指令二维码换行
  2. Android 9.0 SystemUI 锁屏界面禁止状态栏下拉
  3. 招行信用卡中心2020开发笔试
  4. ZYNQ之高速AD/DA验证实验
  5. java ps old gen perm gen_Java 内存模型之堆内存管理
  6. 专业的网站流量分析和统计分析工具
  7. 2021年最实用的12款SEO工具
  8. 使用Python的Scrapy框架编写web爬虫的简单示例
  9. catia中的螺旋伞齿轮画法_用catia画齿轮教程
  10. 【计算机图形学】c++ OpenGL 二维变换(包括多边形绘制、平移、旋转及缩放)