© Fu Xianjun. All Rights Reserved. 今天小赵带大家进入openCV的第三块内容图像色彩于几何变换,案例依然是通过了我们的小傅老师,这个为了我们夜以继日的男人!
图像色彩与几何变换
前言
常见的色彩空间可以包括GRAY色彩空间、XYZ色彩空间、HVS色彩空间等,接下来我带大家走入色彩类型转换。
提示:以下是本篇文章正文内容,下面案例可供参考
一、为什么要转换图像色彩?
因为对于计算机来说,进行图像处理的时候时候往往要进行图像类型转换为实现我们的某个特定的处理提供必要的条件,给大家解释一下常见的几种颜色类型。
二、几种常见的类型转换
1.引入库(话不多说直接上代码)
代码如下(示例):
import cv2
import numpy as np
2.读入数据
代码如下(示例):
#---------读取图片--------#
img=cv2.imread('pig.jpg')
#-------颜色转换----------#
rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
bgr=cv2.cvtColor(rgb,cv2.COLOR_RGB2BGR)
gray=cv2.cvtColor(rgb,cv2.COLOR_RGB2GRAY)
graybian=cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)
g2h=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#--------显示图片----------#
cv2.imshow('yuantu',img)
# cv2.imshow('RGB',rgb)
# cv2.imshow('bgr',bgr)
# cv2.imshow('gray',gray)
# cv2.imshow('graybian',graybian)
cv2.imshow('g2h',g2h)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码效果展示如下
温馨提示:主要的变换格式是 返回的名字 = cv2.cvtColor(原图,色彩转换码)
3.针对图像类型HSV的一个例子(HSV表网上可见的很多)
代码展示如下
import cv2
import numpy as np
jianzhi=cv2.imread('jz.jpg')
cv2.imshow('jianzhi',jianzhi)
hsv=cv2.cvtColor(jianzhi,cv2.COLOR_BGR2HSV)
cv2.imshow('hsv',hsv)
lowerb_hsv=np.array([0,43,46])
upperb_hsv=np.array([10,255,255])
mask=cv2.inRange(hsv,lowerb_hsv,upperb_hsv)
r1=cv2.bitwise_and(jianzhi,jianzhi,mask=mask)
lowerb_hsv=np.array([156,43,46])
upperb_hsv=np.array([180,255,255])
mask=cv2.inRange(hsv,lowerb_hsv,upperb_hsv)
r2=cv2.bitwise_and(jianzhi,jianzhi,mask=mask)
r3=r1+r2
cv2.imshow('red1',r1)
cv2.imshow('red2',r2)
cv2.imshow('red3',r3)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码效果展示如下
温馨提示:这里其实是调整了hsv参数的大小,从而上计算机处理后显示出在那个hsv范围内的可见图像
三、一些常见的几何变换(翻转,缩放、仿射和透视)
3.1 翻转以及缩放
翻转缩放代码展示如下
import cv2
import numpy as np
img=cv2.imread('pig.jpg')
h,w,c=img.shape
ResizeImg=cv2.resize(img,(w//2,h//2)) #resize是更改显示图片的大小,这里是同比例缩小到原来的二分之一
FlipImgx=cv2.flip(ResizeImg,0) #flip函数最后一位是图像改变方式(0是沿着x轴)
FlipImgy=cv2.flip(ResizeImg,1) # 沿着y轴
FlipImgxy=cv2.flip(ResizeImg,-1) #xy同时翻转
# cv2.imshow('yuantu',img)
cv2.imshow('ResizeImg',ResizeImg)
cv2.imshow('FlipImgx',FlipImgx)
cv2.imshow('FlipImgy',FlipImgy)
cv2.imshow('FlipImgxy',FlipImgxy)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码效果展示如下
3.2 仿射以及透视
仿射代码展示如下
import cv2
import numpy as np
img=cv2.imread('pig.jpg')
h,w,c=img.shape
x=100
y=200
M=np.float32([[1,0,x],[0,1,y]]) # M代表用numpy函数创建的一个变换矩阵
MoveImg=cv2.warpAffine(img,M,(w*2,h*2)) #仿射在大小为原图长两倍宽两倍的一个矩形中 位置为x=100,y=200
cv2.imshow('img',img)
cv2.imshow('MoveImg',MoveImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码效果展示如下
透视代码展示如下
import cv2
import numpy as np
img=cv2.imread('pig.jpg')
h,w,c=img.shape
M=cv2.getRotationMatrix2D((w/2,h/2),60,1)
RotateImg=cv2.warpAffine(img,M,(w*2,h*2))
cv2.imshow('img',img)
cv2.imshow('MoveImg',RotateImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码效果展示如下
3.3 小tirck拉直歪了的图像
代码展示如下
import cv2
import numpy as np
img=cv2.imread('lianxi.png')
h,w,c=img.shape
pst_o=np.float32([[46,178],[222,83],[61,290],[271,188]]) # 这里我们运用到了一个IrfanView 去找到了歪的那张图的四个顶的位置
pst_d=np.float32([[0,0],[100,0],[0,100],[100,100]])
M=cv2.getPerspectiveTransform(pst_o,pst_d)
dst=cv2.warpPerspective(img,M,(100,100))
cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码效果展示如下
# 总结 提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了图像颜色转化以及几何变换