1.简介
本文内容参考B站-机器视觉及图像识别
不懂图像处理的图像算法工程师都是耍流氓,本文均属于作者个人看法,仅供参考。
其实学习处理图像,就像是追女孩子。刚开始会有点恐惧,面对那么多华丽丽的技巧,心中不由的会问自己我配吗。接触一段时间以后,觉得也不过如此,再华丽的算法也有瑕疵和一些小任性。最后到手了,你明白真正的爱是懂她,包容她。郭敬明说:“我颠倒了整个世界,只为摆正你的倒影”。我现在虽然还只是小菜鸟一枚,但是对于所有的华丽丽,我已经不再恐惧。下面我们将按照追女神的套路,来学习这门技术,只是为了让枯燥的学习变得有意思。
1.空间转换
图像处理的核心在于将图像转换为矩阵,然后对于矩阵进行修改,再把修改完的矩阵转换成图像。主要分为以下几个方面:图像的空间转换 、图像特效、美化效果。
空间转换是对图像的位置信息进行处理,所以说要追她你先得知道她在哪里,如何去改变她的位置,看个电影喝个茶。
1.图像缩放:
缩放就是缩和放,顾名思义我们要处理的就是如何由原来的像素值生目标像素值。
效果如下:我们把她变小了
实现方式 首先我们直接调用opencv接口来实现,直接用resize即可
import cv2
img = cv2.imread('tangwei.jpg')
print(img.shape)
height = img.shape[0]
width = img.shape[1]
des_height = int(height*0.5)
des_width = int(width*0.5)
img_des = cv2.resize(img,(des_width,des_height))
cv2.imwrite('tangwei-1.jpg',img_des)
cv2.imshow('tangwei',img_des)
cv2.waitKey(0)
插值:插值一般分为两种:最近邻域插值和双线性插值。最近邻域插值就是取离目标点最近的原图上点的像素值作为该点的像素值;要说双线性插值就得先了解线性插值,线性插值的原理是,离自己最近的两个点的值乘以各自所占的比例之和,双线性插值就是水平和垂直方向进行两次线性插值。上面的resize默认使用的就是双线性插值,下面代码展示了最近邻域插值:
#最近邻域插值
import cv2
import numpy as np
#读取原始图片 定义目标图片形状 为新图片像素赋值
#读取原始图片
img = cv2.imread('tangwei.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
#定义目标图片形状
height_dest = int(height/2)
width_dest = int(width/2)
#np.uint8 取值为0-255
img_dest = np.zeros((height_dest,width_dest,3),np.uint8)
#为新图片像素赋值
for i in range(0,height_dest):
for j in range(0,width_dest):
i_new = int(i*(height/height_dest))
j_new = int(j*(width/width_dest))
img_dest[i,j] = img[i_new,j_new]
cv2.imshow('tangwei',img_dest)
cv2.waitKey(0)
2.图片剪切
剪切就是用图像矩阵进行一个切片操作,无聊,无味,简单,我很喜欢!