《计算机视觉技术与应用》-----第二章 图像处理基础
《计算机视觉技术与应用》-----第三章 图形用户界面
《计算机视觉技术与应用》-----第四章 图像变换
《计算机视觉技术与应用》-----第五章 边缘和轮廓
《计算机视觉技术与应用》-----第六章 边缘和轮廓
《计算机视觉技术与应用》-----第七章 边缘和轮廓
《计算机视觉技术与应用》----- 重点复盘
填空(15个题),判断(10个题),简答(1个题)共60分。
两个编程题,共40分。
```python
#习题2-1.py:创建一幅大小为240×320的图像,图像中心是一个大小为100×100的红色正方形,周围是黑色
import cv2
import numpy
img = numpy.zeros((240,320,3),dtype=numpy.uint8) #创建黑色背景
img[70:170,110:210,2]=255 #创建红色区域(100*100)
cv2.imshow('xiti2-1',img)
cv2.waitKey(0)
#习题2-2.py:选择一幅彩色图像,完成下列操作:
#(1)将图像转换为灰度图像显示。
#(2)将图像尺寸减小为原来的1/2显示。
import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)#(1)将彩色图像转换为灰度图像
cv2.imshow('GRASCALE',img)
img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2)#(2)将图像尺寸缩小为原来的1/2
cv2.imshow('COLOR_2',img)
cv2.waitKey(0)
cv2.waitKey(0)
#习题2-3.py:选择一幅彩色图像,通过像素更改,在图像中显示一个大小为80×100的黑色正方形。
import cv2
img=cv2.imread('lena.jpg')
h,w,s=img.shape #得到原图的高宽通道
h1=int(h/2) #获取原图高度的一半,并且强制转换为int
w1=int(w/2)
img[h1-40:h1+40,w1-50:w1+50,:]=0 #也可以直接通过像素区域打码 在img中 img[::]=255
cv2.imshow('xiugai',img)
cv2.waitKey(0)
#习题2-4.py:选择一幅彩色图像,分别显示其B、G、R通道图像。
import cv2
img = cv2.imread('lena.jpg')
cv2.imshow('lena',img)
b,g,r=cv2.split(img)#重点
cv2.imshow('lena-b',b)
cv2.imshow('lena-g',g)
cv2.imshow('lena-r',r)
cv2.waitKey(0)
#习题2-5.py:选择一幅彩色图像,用NumPy数组创建掩模,在图像中心取出大小为80×120的图像。
import cv2
import numpy
src1 = cv2.imread('lena.jpg')
h,w,s=src1.shape
img = numpy.zeros((h,w,s),dtype=numpy.uint8) #创建黑色背景
h1=int(h/2)
w1=int(w/2)
img[h1-40:h1+40,w1-60:w1+60,:]=255
img2=cv2.bitwise_and(src1,img) #题目要求是用Numpy数组创建掩膜的方式打码 img[10:90,20:120,:]=255
cv2.imshow('yanmo',img2)
cv2.waitKey(0)
#习题5-1 选择一幅图像,对其执行Laplacian边缘检测
import cv2
img = cv2.imread('bee.jpg')
cv2.imshow('original',img)
#Laplacian边缘检测
img2 = cv2.Laplacian(img,cv2.CV_8U,ksize=1)
cv2.imshow('L',img2)
cv2.waitKey(0)
#习题5-2 选择一幅图像,对其执行Sobel边缘检测
import cv2
img = cv2.imread('bee.jpg')
cv2.imshow('original',img)
#Sobel边缘检测
img3 = cv2.Sobel(img,cv2.CV_8U,0,1) #0表示对x不求偏导,1表示对y偏导 dx>=0 && dy>=0 && dx+dy>0
cv2.imshow('C',img3)
cv2.waitKey(0)
#习题5-3 选择一幅图像,对其执行Canny边缘检测
import cv2
img = cv2.imread('bee.jpg')
cv2.imshow('original',img)
#Canny边缘检测
img4 = cv2.Canny(img,100,200,apertureSize=3)
cv2.imshow('Canny',img4)
cv2.waitKey(0)
#test5-4.py:查找和绘制轮廓
#先查找后绘制,前7行代码与查找轮廓代码一致
import cv2
import numpy as np
img=cv2.imread('shapes.jpg') #读取图像
cv2.imshow('original',img) #显示原图像
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转化为灰度图像
ret,img2=cv2.threshold(gray,125,255,cv2.THRESH_BINARY)#二值化阈值处理
c,h=cv2.findContours(img2,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
img3=np.zeros(img.shape, np.uint8)+255 #按原图大小创建一幅白色图像
#image=cv2.drawContours(image,contours,contourIdx,color,thickness)
#image:原图
#contours为要绘制的轮廓
img3=cv2.drawContours(img3,c,-1,(0,0,255),2) #绘制轮廓 -1表示绘制所有轮廓
cv2.imshow('Contours',img3) #显示轮廓图像
cv2.waitKey(0) #按任意键结束等待
cv2.destroyAllWindows() #关闭所有窗口