内容简介:[[1, 0, 100], [0, 1, 200]]转变为2个矩阵:[[1, 0], [0, 1]] 和 [[100], [200]]
1. 图片缩放
# 1. 加载图片 # 2. 获取图片信息(宽度,高度) # 3. 调用OpenCV的resize方法,进行图片的缩放 # 4. 检查最终的结果 import cv2
img = cv2.imread('images/image0.jpg', 1) imgInfo = img.shape print (imgInfo) height = imgInfo[0] width = imgInfo[1] mode = imgInfo[2] # 颜色的储存方式,由3种颜色(bgr)组成 # 放大, 缩小, 等比缩放 非等比缩放 dstHeight = int(height*0.5) # 目标高度 dstWidth = int(width*0.5) # 四种resize: 最近邻域插值 双线性插值 像素关系重采样 立方插值 dst = cv2.resize(img, (dstWidth, dstHeight)) cv2.imshow("image", dst) cv2.waitKey(0)
(547, 730, 3) -1
2. 最近邻域插值、双线性插值原理
- 最近邻域插值
原图像:10*20
目标图像: 5*10
目标图像的像素来源于原图像
举例:
目标图像(1, 2)来源于原图像(2, 4)
如何计算:
newX = 原图x*(原图像的行/目标图像的行)
newY = 原图y*(原图像的列/目标图像的列)
比如目标图像的第一列的第一个点,来源于原图像的第一列的二个点(1* (10/5) = 2)
目标图像(2, 3)点,来源于(4, 6) -
双线性插值
A1 = 20%上 + 80%下 A2
B1 = 30%上 + 70%下 B2
# 最近邻域插值 # 1. 获取图片信息 # 2. 创建一个空白模板,与预期目标大小一样 # 3. 计算对应的像素 import cv2 import numpy as np img = cv2.imread('images/image0.jpg', 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) # 0-255 for i in range(0, dstHeight): # 行 for j in range(0, dstWidth): # 列 iNew = int(i*(height*1.0/dstHeight)) jNew = int(j*(width*1.0/dstWidth)) dstImage[i, j] = img[iNew, jNew] cv2.imshow('dstImage', dstImage) cv2.waitKey(0)
2. 图片剪切
# 剪切(100, 100) -> (200, 300) import cv2 img = cv2.imread('images/image0.jpg', 1) dst = img[100:200, 100:300] # 将蓝红通道设为0 dst[:, :, [0, 2]] = 0 cv2.imshow("image", dst) cv2.waitKey(0)
-1
3. 图片移位
import cv2 import numpy as np img = cv2.imread('images/image0.jpg', 1) cv2.imshow('src', img) imgInfo = img.shape height, width = imgInfo[0], imgInfo[1] # 进行矩阵的移位 matShift = np.float32([[1, 0, 100], [0, 1, 200]]) # 2*3 dst = cv2.warpAffine(img, matShift, (height, width)) # 矩阵映射,原图, 移位矩阵, 图片的高度和宽度 cv2.imshow('dst', dst) cv2.waitKey(0)
[[1, 0, 100], [0, 1, 200]]
转变为2个矩阵:
[[1, 0], [0, 1]] 和 [[100], [200]]
分别对应A和B矩阵,原图像为C[x, y]
A * C + B = [[1 x+0 y], [0 x+1 y]] + [[100], [200]]
# 算法原理实现图片移位 import cv2 import numpy as np img = cv2.imread('images/image0.jpg', 1) cv2.imshow('src', img) imgInfo = img.shape dst = np.zeros(img.shape, np.uint8) height, width = imgInfo[0], imgInfo[1] for i in range(0, height): for j in range(0, width-100): dst[i, j+100] = img[i, j] cv2.imshow('dst', dst) cv2.waitKey(0)
-1
4. 图片镜像
# 1. 创建一个足够大的画板 # 2. 将一副图像从前向后,从后向前绘制 # 3. 绘制中心分割线 import cv2 import numpy as np img = cv2.imread('images/image0.jpg', 1) imgInfo = img.shape height, width, deep = imgInfo[0], imgInfo[1], imgInfo[2] newImgInfo = (height*2, width, deep) dst = np.zeros(newImgInfo, np.uint8) for i in range(height): for j in range(width): dst[i, j] = img[i, j] # 绘制镜像部分, x轴不变, y = 2*h - y - 1 dst[height*2-i-1, j] = img[i, j] for i in range(width): dst[height, i] = (0, 0, 255) cv2.imshow('image', dst) cv2.waitKey(0)
-1
5. 图片缩放
# 缩放1倍 import cv2 import numpy as np img = cv2.imread('images/image0.jpg', 1) imgInfo = img.shape height, width = imgInfo[0], imgInfo[1] matScale = np.float32([[0.5, 0, 0], [0, 0.5, 0]]) dst = cv2.warpAffine(img, matScale, (int(width/2), int(height/2))) cv2.imshow('dst', dst) cv2.waitKey(0)
-1
6. 仿射变换
import cv2 import numpy as np img = cv2.imread('images/image0.jpg', 1) imgInfo = img.shape height, width = imgInfo[0], imgInfo[1] # 3点确定一个平面,分别是左上角, 左下角, 右上角 matSrc = np.float32([[0, 0], [0, height], [width, 0]]) matDst = np.float32([[50, 50], [300, height-200], [width-300, 100]]) # 组合 matAffine = cv2.getAffineTransform(matSrc, matDst) # 获取矩阵组合, 1: 描述原矩阵的三点, 2: 目标矩阵的三点 dst = cv2.warpAffine(img, matAffine, (width, height)) cv2.imshow('image', dst) cv2.waitKey(0)
7. 旋转图片
import cv2 import numpy as np img = cv2.imread('images/image0.jpg', 1) imgInfo = img.shape height, width = imgInfo[0], imgInfo[1] # 定义旋转矩阵 matRotate = cv2.getRotationMatrix2D((height*0.5, width*0.5), 45, 1) # 得到旋转矩阵, 1 旋转中心店, 2 旋转角度, 3 缩放系数 dst = cv2.warpAffine(img, matRotate, (width, height)) cv2.imshow('image', dst) cv2.waitKey(0)
-1
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- OpenCV+TensorFlow 人工智能图像处理 (1)
- Opencv图像处理系列(六)—— 图像梯度
- Opencv图像处理系列(九)—— 图像轮廓
- Python 图像处理 OpenCV (15):图像轮廓
- Opencv图像处理系列(三)——图像二值化
- Opencv图像处理系列(八)—— 图像金字塔
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
第二曲线:跨越“S型曲线”的二次增长
[英]查尔斯·汉迪(Charles Handy) / 苗青 / 机械工业出版社 / 2017-6 / 49.00
S型曲线是每个组织和企业在预测未来时一定会参考的工具,一切事物的发展都逃不开S型曲线(“第一曲线”)。 然而,从公司组织、企业治理、市场的变化,到个人职业发展、社会人际关系以及未来的教育与社会价值,多维度地探讨这个世界需要重新以不同的角度来思考问题,不能够总是停留在“第一曲线”的世界。 如果组织和企业能在第一曲线到达巅峰之前,找到带领企业二次腾飞的“第二曲线”,并且第二曲线必须在第一曲......一起来看看 《第二曲线:跨越“S型曲线”的二次增长》 这本书的介绍吧!