OpenCV图像处理应用(面向Python)

  • 欢迎来到梁老湿课堂
  • 我们首先要对**RGB,GRAY,HSV和RGBA**色彩空间的概念有大致的了解。
  • 色彩空间的转换函数
  • 实现颜色提取:提取指定颜色
  • 学会几何变换,并且实现图像的几何变换
  • 多练多学多坚持,我们下期再见。


欢迎来到梁老湿课堂

版权声明:
作者:OpenCV小课堂
导师:Fu Xianjun
本文版权归作者导师共有,欢迎转载,但未经作者同意必须在文章页面注明来源及原作者或原文链接,否则保留追究法律责任的权利。

我们首先要对RGB,GRAY,HSV和RGBA色彩空间的概念有大致的了解。

1.RGB

python HSV分离 python hsv转rgb_计算机视觉


2.GRAY

python HSV分离 python hsv转rgb_图像处理_02


3.HSV

python HSV分离 python hsv转rgb_图像处理_03


4.RGBA

RGBA是代表Red(红色)Green(绿色)Blue(蓝色)和Alpha的色彩空间。虽然它有的时候被描述为一个颜色空间,但是它其实仅仅是RGB模型的附加了额外的信息。采用的颜色是RGB,可以属于任何一种RGB颜色空间.

色彩空间的转换函数

使用cv2.cvtColor()函数,实现各种色彩空间的转换格式为:

dst=cv2.cvtColor(src,code)

dst为输出图像

src为原图

code是色彩空间转换码(转换码有很多,可以在百度查到,也可以参考以下,后续只需要改code就可以啦)

python HSV分离 python hsv转rgb_图像处理_04


python HSV分离 python hsv转rgb_python HSV分离_05

python HSV分离 python hsv转rgb_计算机视觉_06


python HSV分离 python hsv转rgb_opencv_07

实现颜色提取:提取指定颜色

python HSV分离 python hsv转rgb_图像处理_08


dst=cv2.inRange()函数

dst为输出图像

src为原图

lowerb表示范围下界

upperb表示范围上界

python HSV分离 python hsv转rgb_图像处理_09


源代码:

import cv2
 import numpy as np
 img2=cv2.imread(“pig.jpg”)
 cv2.imshow(“SRC”,img2)
 hsv = cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)#图像类型转换函数
 cv2.imshow(“HSV”,hsv)
 lowerb_hsv = np.array([156,43,46])#要识别颜色的下界
 upperb_hsv = np.array([180,255,255])#要识别的颜色的上界
 mask = cv2.inRange(hsv, lowerb_hsv, upperb_hsv)
 cv2.imshow(“MASK”,mask)
 cv2.waitKey(0)
 cv2.destroyAllWindows()

只需修改对应的上界和下界即可

学会几何变换,并且实现图像的几何变换

1.缩放:

img_resize=cv2.resize(img,None,fx=1,fy=0.5)

dst:为输出目标图像

src:原图

dsize:输出图像大小

fx:水平方向的缩放比例

fy:垂直方向的缩放比例

python HSV分离 python hsv转rgb_opencv_10


源代码:

import cv2
 img=cv2.imread(“lina.png”)
 h,w,c=img.shape
 img_resize=cv2.resize(img,None,fx=1,fy=0.5)
 cv2.imshow(‘lina’,img_resize)
 cv2.imshow(‘lina1’,img)
 cv2.waitKey()
 cv2.destroyAllWindows()

修改fx,fy的值可获得不一样的效果

2.翻转:

img1=cv2.flip(img,-1)

img1为修改后输出的图像

img为原图

-1为旋转类型,0绕x轴翻转,正数绕着y轴翻转,负数绕x,y轴同时翻转

python HSV分离 python hsv转rgb_opencv_11


源代码:

import cv2
 img=cv2.imread(“lina.png”)
 img1=cv2.flip(img,-1)
 img2=cv2.flip(img,0)
 img3=cv2.flip(img,1)
 cv2.imshow(‘lina’,img)
 cv2.imshow(‘lina1’,img1)
 cv2.imshow(‘lina2’,img2)
 cv2.imshow(‘lina3’,img3)
 cv2.waitKey()
 cv2.destroyAllWindows()

修改旋转类型参数可获得不一样的翻转图像

3.仿射:

dst=cv2.warpAffine(src,M,dsize)

dst是输出图像

src是原图

M代表2×3的变换矩阵,使用不同变换矩阵,可实现不同放射变换

dsize代表输出图像的尺寸大小

下面是仿射之平移

python HSV分离 python hsv转rgb_计算机视觉_12


源代码:
 import cv2
 import numpy as np
 img=cv2.imread(“lina.png”)
 h,w,c=img.shape
 x=200
 y=200
 M=np.float32([[1,0,x],[0,1,y]])
 img_move=cv2.warpAffine(img,M,(w,h))
 cv2.imshow(‘lina’,img_move)
 cv2.imshow(‘lina1’,img)
 cv2.waitKey()
 cv2.destroyAllWindows()
仿射之旋转
 M=cv2.getRotationMatrix2D((center,angle,scale)

center为旋转中心

angle旋转角度,正数表示逆时针,负数表示顺时针

scale为变换尺度(即缩放大小)

python HSV分离 python hsv转rgb_计算机视觉_13


源代码:

import cv2
 img=cv2.imread(“lina.png”)
 h,w,c=img.shape
 M=cv2.getRotationMatrix2D((w/2,h/2),90,1)
 lyp=cv2.warpAffine(img,M,(w,h))
 cv2.imshow(‘lina’,lyp)
 cv2.imshow(‘lina1’,img)
 cv2.waitKey()
 cv2.destroyAllWindows()

4.透视:

img1=np.float32([[46,180],[222,79],[62,288],[268,183]])
 img2=np.float32([[0, 0], [600, 0], [0, 600], [600, 600]])
 M=cv2.getPerspectiveTransform(img1,img2)
 img3=cv2.warpPerspective(img,M,(600,600))

img1为输入图像的四个顶点坐标

img2输出图像的四个顶点坐标

M代表一个3×3的变换矩阵

img3最终输出结果

img原图

python HSV分离 python hsv转rgb_python HSV分离_14


源代码:

import cv2
 import numpy as np
 img=cv2.imread(“lina.png”)
 h,w,c=img.shape
 img1=np.float32([[46,180],[222,79],[62,288],[268,183]])
 img2=np.float32([[0, 0], [600, 0], [0, 600], [600, 600]])
 M=cv2.getPerspectiveTransform(img1,img2)
 img3=cv2.warpPerspective(img,M,(600,600))
 cv2.imshow(‘img’,img)
 cv2.imshow(‘img3’,img3)
 cv2.waitKey(0)
 cv2.destroyAllWindows()