《计算机视觉技术与应用》-----第四章 图像变换

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、4.1 色彩空间变换
  • 二、4.2 几何变换
    • 2.读入数据
  • 总结
  • 参考


前言

提示:这里可以添加本文要记录的大概内容:

图像变换是指通过技术手段将图像转换为另一幅图像,如色彩空间变换、几何变换、图像模糊、阈值处理和形态变换等。


提示:以下是本篇文章正文内容,下面案例可供参考

一、4.1 色彩空间变换

  1. #test4-1.py 将BGR色彩空间转换为RGB色彩空间
    《计算机视觉技术与应用》-----第四章 图像变换_第1张图片
#test4-1.py 将BGR色彩空间转换为RGB色彩空间
import cv2
img=cv2.imread('bee.jpg')  	            #读取图像
cv2.imshow('BGR',img)  	                #显示图像
img2=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #转换色彩空间为RGB
cv2.imshow('RGB',img2)  	             #显示图像
cv2.waitKey(0)
  1. #test4-2.py:BGR色彩空间转换为GRAY色彩空间
    《计算机视觉技术与应用》-----第四章 图像变换_第2张图片
#test4-2.py:BGR色彩空间转换为GRAY色彩空间
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('BGR',img)  	        #显示图像
img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转换色彩空间为GRAY
cv2.imshow('GRAY',img2)  	        #显示图像
cv2.waitKey(0)
  1. #test4-3.py:BGR色彩空间转换为YCrCb色彩空间

3.1 YCrCb概念
YCrCb即YUV,主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

3.2应用
在人脸检测中也常常用到YCrCb空间,因为一般的图像都是基于RGB空间的,在RGB空间里人脸的肤色受亮度影响相当大,所以肤色点很难从非肤色点中分离出来,也就是说在此空间经过处理后,肤色点是离散的点,中间嵌有很多非肤色,这为肤色区域标定(人脸标定、眼睛等)带来了难题。如果把RGB转为YCrCb空间的话,可以忽略Y(亮度)的影响,因为该空间受亮度影响很小,肤色会产生很好的类聚。这样就把三维的空间降为二维的CrCb,肤色点会形成一定得形状,如:人脸的话会看到一个人脸的区域,手臂的话会看到一条手臂的形态,对处理模式识别很有好处,根据经验某点的CrCb值满足:133≤Cr≤173,77≤Cb≤127 那么该点被认为是肤色点,其他的就为非肤色点。【参考RGB和YCrCb】

《计算机视觉技术与应用》-----第四章 图像变换_第3张图片

#test4-3.py:BGR色彩空间转换为YCrCb色彩空间
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('BGR',img)  	        #显示图像
img2=cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb) #转换色彩空间为YCrCb
cv2.imshow('YCrCb',img2)  	        #显示图像
cv2.waitKey(0)
  1. #test4-4.py:BGR色彩空间转换为HSV色彩空间
    HSV色彩空间
    色相(H)是色彩的基本属性,就是平常所说的颜色名称,如红色、黄色等
    用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
    《计算机视觉技术与应用》-----第四章 图像变换_第4张图片
    饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。
    明度(V),亮度(L),取0-100%。
    《计算机视觉技术与应用》-----第四章 图像变换_第5张图片
    【参考:HSV色彩空间】
    《计算机视觉技术与应用》-----第四章 图像变换_第6张图片
#test4-4.py:BGR色彩空间转换为HSV色彩空间
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('BGR',img)  	        #显示图像
img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #转换色彩空间为HSV
cv2.imshow('HSV',img2)  	        #显示图像
cv2.waitKey(0)

二、4.2 几何变换

几何变换是指对图像执行放大、缩小、旋转等各种操作。

  1. 缩放图像
    《计算机视觉技术与应用》-----第四章 图像变换_第7张图片
    《计算机视觉技术与应用》-----第四章 图像变换_第8张图片

《计算机视觉技术与应用》-----第四章 图像变换_第9张图片

#test4-5.py:缩放图像
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
sc=[1,0.2,0.5,1.5,2]            #设置缩放比例
cv2.imshow('showimg',img)  	#显示图像
while True:                   	    
    key=cv2.waitKey() #delay = 0:持续无限长的时间,delay >0:持续多少毫秒delay <0:等待键盘按键,任何一个按键都会关闭程序 
    if 48<=key<=52: #按键【0】、【1】、【2】、【3】或【4】
        x=y=sc[key-48]  #获得缩放比例
        img2=cv2.resize(img,None,fx=x,fy=y)   #缩放图像 dsize=None 目标图像高度=原始图像*fx
        cv2.imshow('showimg',img2)  	        #显示图像

  1. 翻转
#test4-6.py:翻转图像
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('showimg',img)  	#显示图像

img2=cv2.flip(img,0)
cv2.imshow('绕X轴垂直翻转',img2)  #绕X轴垂直翻转
img3=cv2.flip(img,1)
cv2.imshow('绕y轴水平翻转',img3)  #绕y轴水平翻转
img4=cv2.flip(img,-1)
cv2.imshow('水平、垂直翻转',img4)  #水平、垂直翻转
key=cv2.waitKey(0)


  1. 仿射
    3.1 平移
    平移是指将图像沿水平或垂直方向移动一定像素。
    《计算机视觉技术与应用》-----第四章 图像变换_第10张图片
#test4-7.py:图像向左移动100像素,向下移动50像素
import cv2
import numpy as np
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('img',img)  	        #显示图像
height=img.shape[0]             #获得图像高度
width=img.shape[1]              #获得图像宽度
dsize=(width,height)
m=np.float32([[1,0,100],[0,1,50]])#创建转换矩阵
img2=cv2.warpAffine(img,m,dsize)        #平移图像
cv2.imshow('imgx+100y+50',img2)  	#显示图像
cv2.waitKey(0)

3.2 缩放
缩放矩阵M=[[h,0,0],[0,v,0]
《计算机视觉技术与应用》-----第四章 图像变换_第11张图片

#test4-8.py:图像缩放
import cv2
import numpy as np
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('img',img)  	        #显示图像
height=img.shape[0]             #获得图像高度
width=img.shape[1]              #获得图像宽度
dsize=(width,height)
m=np.float32([[0.5,0,0],[0,0.5,0]])#创建转换矩阵 缩放矩阵M=[[h,0,0],[0,v,0]
img2=cv2.warpAffine(img,m,dsize)        #执行缩放
cv2.imshow('img0.5x+0.5y',img2)  	#显示图像
cv2.waitKey(0)

3.3 旋转
《计算机视觉技术与应用》-----第四章 图像变换_第12张图片

#test4-9.py:图像旋转
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('img',img)  	        #显示图像
height=img.shape[0]             #获得图像高度
width=img.shape[1]              #获得图像宽度
dsize=(width,height)
m=cv2.getRotationMatrix2D((width/2,height/2), -60, 0.5)#创建转换矩阵 (ceter,angle,scale) angele负数表示顺时针旋转
img2=cv2.warpAffine(img,m,dsize)        #执行旋转
cv2.imshow('imgRotation',img2)  	#显示图像
cv2.waitKey(0)

3.4 三点映射变换
将图像转换为任意的平行四边形
《计算机视觉技术与应用》-----第四章 图像变换_第13张图片

#test4-10.py:图像的三点映射变换
import cv2
import numpy as np
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('img',img)  	        #显示图像
height=img.shape[0]             #获得图像高度
width=img.shape[1]              #获得图像宽度
dsize=(width,height)
src=np.float32([[0,0],[width-10,0],[0,height-1]])#取原图像中三个点
dst=np.float32([[50,50],[width-100,80],[100,height-100]])#设置三点在目标图像中的坐标
m = cv2.getAffineTransform(src, dst)#创建转换矩阵
img2=cv2.warpAffine(img,m,dsize)        #执行转换
cv2.imshow('imgThreePoint',img2)  	#显示图像
cv2.waitKey(0)

3.4 透视
《计算机视觉技术与应用》-----第四章 图像变换_第14张图片

#test4-11.py:图像的透视变换
import cv2
import numpy as np
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('img',img)  	        #显示图像
height=img.shape[0]             #获得图像高度
width=img.shape[1]              #获得图像宽度
dsize=(width,height)
src=np.float32([[0,0],[width-10,0],
                [0,height-10],[width-1,height-1]])#取原图像中四个点
dst=np.float32([[50,50],[width-50,80],
                [50,height-100],[width-100,height-10]])#设置四点在目标图像中的坐标
m = cv2.getPerspectiveTransform(src, dst)#创建转换矩阵
img2=cv2.warpPerspective(img,m,dsize)#执行转换
cv2.imshow('imgFourPoint',img2)  	#显示图像
cv2.waitKey(0)

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

参考

  1. RGB和YCrCb

你可能感兴趣的:(计算机视觉技术与应用,计算机视觉,opencv,python)