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

系列文章目录

《计算机视觉技术与应用》—–第二章 图像处理基础

《计算机视觉技术与应用》—–第三章 图形用户界面

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

《计算机视觉技术与应用》—–第五章 边缘和轮廓

《计算机视觉技术与应用》—–第六章 边缘和轮廓

《计算机视觉技术与应用》—–第七章 边缘和轮廓

《计算机视觉技术与应用》—– 重点复盘

文章目录

前言

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

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

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

一、4.1 色彩空间变换

  1. test4-1.py 将BGR色彩空间转换为RGB色彩空间

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

    《计算机视觉技术与应用》-----第四章 图像变换
import cv2img=cv2.imread('bee.jpg')cv2.imshow('BGR',img)img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)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

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

import cv2
img=cv2.imread('bee.jpg')
cv2.imshow('BGR',img)
img2=cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)
cv2.imshow('YCrCb',img2)
cv2.waitKey(0)
  1. test4-4.py:BGR色彩空间转换为HSV色彩空间

    HSV色彩空间
    色相(H)是色彩的基本属性,就是平常所说的颜色名称,如红色、黄色等
    用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;

    《计算机视觉技术与应用》-----第四章 图像变换
    饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。
    明度(V),亮度(L),取0-100%。
    《计算机视觉技术与应用》-----第四章 图像变换
    【参考:HSV色彩空间
    《计算机视觉技术与应用》-----第四章 图像变换
import cv2img=cv2.imread('bee.jpg')cv2.imshow('BGR',img)img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)cv2.imshow('HSV',img2)cv2.waitKey(0)

二、4.2 几何变换

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

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

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

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()
    if 48key52:
        x=y=sc[key-48]
        img2=cv2.resize(img,None,fx=x,fy=y)
        cv2.imshow('showimg',img2)

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

import cv2
img=cv2.imread('bee.jpg')
cv2.imshow('showimg',img)

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

  1. 仿射
    3.1 平移
    平移是指将图像沿水平或垂直方向移动一定像素。
    《计算机视觉技术与应用》-----第四章 图像变换

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]

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

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]])
img2=cv2.warpAffine(img,m,dsize)
cv2.imshow('img0.5x+0.5y',img2)
cv2.waitKey(0)

3.3 旋转

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

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)
img2=cv2.warpAffine(img,m,dsize)
cv2.imshow('imgRotation',img2)
cv2.waitKey(0)

3.4 三点映射变换
将图像转换为任意的平行四边形

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

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 透视

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

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)

三、4.3 图像模糊

1. 均值滤波
卷积核为3×3

《计算机视觉技术与应用》-----第四章 图像变换
卷积核为5×5
《计算机视觉技术与应用》-----第四章 图像变换
卷积核为21×21
《计算机视觉技术与应用》-----第四章 图像变换

代码如下:


import cv2
img=cv2.imread('lena2.jpg')
cv2.imshow('img',img)
img2=cv2.blur(img,(21,21))
cv2.imshow('imgBlur',img2)
cv2.waitKey(0)

高斯滤波

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

import cv2
img=cv2.imread('lena2.jpg')
cv2.imshow('img',img)
img2=cv2.GaussianBlur(img,(3,3),0,0)
cv2.imshow('imgBlur',img2)
cv2.waitKey(0)

3.方框滤波
归一化

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

《计算机视觉技术与应用》-----第四章 图像变换
未归一化时,滤波结果得到的像素值可能会超过允许的最大值,从而被截断为最大值,这时就会得到一副白色图像。(也就是说,未归一化时,滤波结果为像素值之和,可能会超过255,超过截断为255,那就是白色图像)

4.中值滤波

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

import cv2
img=cv2.imread('lena2.jpg')
cv2.imshow('img',img)
img2=cv2.medianBlur(img,5)
cv2.imshow('imgBlur',img2)
cv2.waitKey(0)

5. 双边滤波

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

import numpy as np
import cv2
img=cv2.imread('lena2.jpg')
cv2.imshow('img',img)
img2=cv2.bilateralFilter(img,50,50,50)
cv2.imshow('imgBlur',img2)
cv2.waitKey(0)

6. 2D卷积

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

import numpy as np
import cv2
img=cv2.imread('lena2.jpg')
k1=np.array([[3,3,3,3,3],
             [3,9,9,9,3],
             [3,11,12,13,3],
             [3,8,8,8,3],
             [3,3,3,3,3],])/25
k2=np.ones((5,5),np.float32)/25
img2=cv2.filter2D(img,-1,k1)
cv2.imshow('imgK1',img2)
img2=cv2.filter2D(img,-1,k2)
cv2.imshow('imgK2',img2)
cv2.waitKey(0)

7.阈值处理

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

import cv2
img=cv2.imread('bee.jpg')
cv2.imshow('img',img)
ret,img2=cv2.threshold(img,150,255,cv2.THRESH_BINARY)
cv2.imshow('imgTHRESH_BINARY',img2)
cv2.waitKey(0)

9.反二值化阈值处理

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

import cv2
img=cv2.imread('bee.jpg')
cv2.imshow('img',img)
ret,img2=cv2.threshold(img,150,255,cv2.THRESH_BINARY_INV)
cv2.imshow('imgTHRESH_BINARY_INV',img2)
cv2.waitKey(0)

10. 截断阈值处理

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

import cv2
img=cv2.imread('bee.jpg')
cv2.imshow('img',img)
ret,img2=cv2.threshold(img,150,255,cv2.THRESH_TRUNC)
cv2.imshow('imgTHRESH_TRUNC',img2)
cv2.waitKey(0)

11. 超阈值零处理

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

import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('img',img)
ret,img2=cv2.threshold(img,100,255,cv2.THRESH_TOZERO_INV)
cv2.imshow('imgTHRESH_TOZERO_INV',img2)
cv2.waitKey(0)

12.低阈值零处理

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

import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('img',img)
ret,img2=cv2.threshold(img,150,255,cv2.THRESH_TOZERO)
cv2.imshow('imgTHRESH_TOZERO',img2)
cv2.waitKey(0)

五、 4.5 形态变换

1.腐蚀
OpenCV-腐蚀cv::erode

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

迭代1次

《计算机视觉技术与应用》-----第四章 图像变换
迭代5次
《计算机视觉技术与应用》-----第四章 图像变换
通过腐蚀操作,图像的边界被侵蚀,白色区域缩小。

import cv2
import numpy as np
img=cv2.imread('zh2.jpg')
cv2.imshow('img',img)
kernel = np.ones((5,5),np.uint8)
img2 = cv2.erode(img,kernel,iterations = 1)

img3 = cv2.erode(img,kernel,iterations = 5)
cv2.imshow('img2_1',img2)
cv2.imshow('img2_5',img3)
cv2.waitKey(0)

2.膨胀

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

import cv2
import numpy as np
img=cv2.imread('zh.jpg')
cv2.imshow('img',img)
kernel = np.one((5,5),np.uint8)
img2 = cv2.dilate(img,kernel,iterations = 2)

cv2.imshow('img2',img2)
cv2.waitKey(0)

3.开运算
对图像先执行腐蚀操作,再对腐蚀的结果执行膨胀操作

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

import cv2
import numpy as np
img=cv2.imread('zh2.jpg')
cv2.imshow('img',img)
kernel = np.ones((5,5),np.uint8)

op=cv2.MORPH_OPEN

img2 = cv2.morphologyEx(img,op,kernel,iterations=2)

cv2.imshow('img2',img2)
cv2.waitKey(0)

4.闭运算

与开运算相反,先对图像执行膨胀操作,再对膨胀的结果执行腐蚀操作

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

import cv2
import numpy as np
img=cv2.imread('zh.jpg')
cv2.imshow('img',img)
kernel = np.ones((5,5),np.uint8)
op=cv2.MORPH_CLOSE
img2 = cv2.morphologyEx(img,op,kernel,iterations=5)
cv2.imshow('img2',img2)
cv2.waitKey(0)

第4章实验1图像几何变换

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

import cv2
img = cv2.imread('clocktower.png')
cv2.imshow('showing',img)

h=img.shape[0]
w=img.shape[1]
angle = 1
scale = 1
f = -1

while True:
    m = cv2.getRotationMatrix2D((w/2,h/2),-angle,scale+f*0.1)

    angle = (angle+10)%360
    scale = scale+f*0.1
    if scale0.1 or scale >=1:
        f=f*(-1)
    img2 = cv2.warpAffine(img,m,(w,h))
    key = cv2.waitKey(100)
    if key == 27:
        break
    cv2.imshow('showing',img2)
cv2.destroyWindow()

实验2:图像形态变换

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

import cv2
import numpy as np
img = cv2.imread('AB.png')
cv2.imshow('img',img)

kernel = np.ones((5,5),np.uint8)

op = cv2.MORPH_OPEN
img2 = cv2.morphologyEx(img,op,kernel,iterations=2)
img3 = cv2.morphologyEx(img,op,kernel,iterations=3)
cv2.imshow('img2_2',img2)
cv2.imshow('img2_3',img3)
cv2.waitKey(0)

习题

1.习题4-1:选择一幅图像,将其分别转换为RGB色彩空间、GRAY色彩空间、YCrCb色彩空间和HSV色彩空间

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

import cv2
img=cv2.imread('clocktower.png')

cv2.imshow('original',img)

img2=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
cv2.imshow('RGB',img2)

img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('GRAY',img2)

img2=cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)
cv2.imshow('YCrCb',img2)

img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('HSV',img2)
cv2.waitKey(0)

2.习题4-2:选择一幅图像,对其分别执行缩放、旋转、平移、透视等操作

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

import cv2
import numpy as np
img=cv2.imread('clocktower.png')
cv2.imshow('original',img)
h=img.shape[0]
w=img.shape[1]

img2=cv2.resize(img,None,fx=0.3,fy=0.3)
cv2.imshow('resize',img2)

m=cv2.getRotationMatrix2D((w/2,h/2),90,0.5)

img2=cv2.warpAffine(img,m,(w,h))
cv2.imshow('Rotation',img2)

m=np.float32([[1,0,100],[0,1,100]])

img2=cv2.warpAffine(img,m,(w,h))
cv2.imshow('offset',img2)

src=np.float32([[0,0],[w,0],
                [0,h],[w,h]])

dst=np.float32([[50,50],[w-100,50],[50,h-50],
                [w-10,h-10]])

m = cv2.getPerspectiveTransform(src, dst)
img2=cv2.warpPerspective(img,m,(w,h))
cv2.imshow('Perspective',img2)
cv2.waitKey(0)

3.习题4-3:选择一幅图像,对其分别执行均值滤波、高斯滤波、方框滤波、中值滤波和双边滤波等操作。

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

import cv2
import numpy as np
img=cv2.imread('clocktower.png')
cv2.imshow('original',img)

img2=cv2.blur(img,(20,20))
cv2.imshow('blur',img2)

img2=cv2.GaussianBlur(img,(5,5),0,0)
cv2.imshow('GaussianBlur',img2)

img2=cv2.boxFilter(img,-1,(3,3),normalize=False)
cv2.imshow('boxFilter',img2)

img2=cv2.medianBlur(img,21)
cv2.imshow('medianBlur',img2)

img2=cv2.bilateralFilter(img,20,100,100)

cv2.imshow('bilateralFilter',img2)

k1=np.array([[3,3,3,3,3],[3,9,9,9,3],[3,11,12,13,3],[3,8,8,8,3],
             [3,3,3,3,3],])/25
k2=np.ones((5,5),np.float32)/25
img2=cv2.filter2D(img,-1,k1)
cv2.imshow('filter2D K1',img2)
img2=cv2.filter2D(img,-1,k2)
cv2.imshow('filter2D K2',img2)
cv2.waitKey(0)

5.习题4-5:绘制图4-49所示的图像,对其分别执行腐蚀、膨胀等各种形态变换操作。

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

import cv2
import numpy as np
img = cv2.imread('ball.png')
cv2.imshow('original',img)

kernel = np.ones((5,5),np.uint8)
img2 = cv2.erode(img,kernel,iterations=2)
img3 = cv2.dilate(img2,kernel,iterations=2)
op = cv2.MORPH_OPEN
img4 = cv2.morphologyEx(img,op,kernel,iterations=2)

cv2.imshow('dilate',img3)
cv2.imshow('kaiyunsuan',img4)
cv2.waitKey(0)

总结

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

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

参考

  1. RGB和YCrCb

Original: https://blog.csdn.net/xiaoren886/article/details/127331992
Author: r i c k
Title: 《计算机视觉技术与应用》—–第四章 图像变换

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/638207/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球