版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机视觉--OpenCV图像处理教程第二章数字图像基本操作BASICOPERATIONSOFDIGITALIMAGES内容要点:图像在OpenCV中的打开与保存、数字图像在计算机中的表示方法、视频在OpenCV中的打开与保存、图像的灰度化、彩色化、兴趣区域选取等基本操作、图像的基本几何变换建议课时:6课时讲课人:宋桂岭讲课时间:2026年5月18日目录2.1数字图像的读取与显示理论+实操2.2数字图像在计算机中的表示理论+实操2.3视频采集与存储理论+实操2.4图像基本操作理论+实操2.5图像的几何变换理论+实操2.6基于颜色的目标追踪项目实战2.7小结及作业理论讲解012.1数字图像的读取与显示理论+实操2.1数字图像的读取与显示图像Image图像是人类视觉的基础,是自然景物的客观反映,是人类认识世界和人类本身的重要源泉。“图”是物体反射或透射光的分布,“像”是人的视觉系统所接受的图在人脑中所形成的印象或认识。数字图像DigitalImage自然界中图像在计算机中的表示称为数字图像。照片、绘画、剪贴画、地图、书法作品、手写汉字、传真、卫星云图、影视画面、X光片、脑电图、心电图等都是图像2.1数字图像的读取与显示实操步骤创建新项目及文件夹1、下载图像/sgl_666/opencv/blob/master/code/chp2/data/0000.jpg2、打开PyCharm,创建新项目3、在新项目上右键,创建data文件夹,图像拷贝到该文件夹内2.1数字图像的读取与显示4、拷贝图像到data文件夹5、创建image_read.py,编写代码:importcv2img=cv2.imread('data/0000.jpg')cv2.imshow("img",img)cv2.waitKey(0)6、在工作区点击右键,运行image_read.py022.2数字图像在计算机中的表示理论+实操2.2.1实操验证1、创建image_info.py,编写代码:importcv2img=cv2.imread('data/0000.jpg')print(img.shape)2、右键运行image_info.py,输出为:(1920,2560,3)2.2.2图像属性3、结果验证,选中000.jpg文件→右键→在文件夹中打开→选中文件后→右键→查看属性右键-属性①可以看到图像大小为2560x1920像素,位深度为24。这里2560为图像宽度,1920为图像宽度,在计算机中,一位为8个字节,24/8=3,刚好(1920,2560,3)【注意:显示顺序,数组行=高,列=宽】②③输出结果为2.2.3图像坐标系在OpenCV中,图像原点位于图像的左上角,坐标值(0,0)的点代表图像的第一个元素,x轴向右为正,代表图像的行,y轴向下为正print(img[0,0])print(img)输出结果为[200196195]输出结果:2.2.3图像坐标系在OpenCV中,用行、列序号索引图像某个像素值,即img[row,col]中的第一维索引为图像行号,第二维索引为图像列号我们通常称图像分辨率为2560x1920,其中2560为图像宽度,1920为图像宽度,和OpenCV中的索引顺序不同,在实际编程中需要特别注意显示器及某个区域在电子显微镜下的放大效果另外:OpenCV彩色图像的排列顺序为蓝绿红一般软件为红绿蓝,这里也需要注意2.2.3数字图像的分类二进制图像(只有二值,0表示黑色,1表示白色)灰度图像(uint8,取值范围[0,255])RGB图像(3通道混合,每个通道取值范围[0,255])索引图像,包括索引矩阵和颜色映射(调色板)矩阵2.2.3数字图像的分类多帧图像(CT)多帧图像(GIF)032.3视频采集与存储理论+实操2.3视频采集与存储①创建文件video_capture.py②创建显示视频窗口③打开摄像头importcv2dWindow('Video’)video_capture=cv2.VideoCapture(0)2.3视频采集与存储④创建视频写入对象,保存摄像头数据到硬盘video_writer=cv2.VideoWriter('data/test.mp4',cv2.VideoWriter_fourcc(*"mp4v"),video_capture.get(cv2.CAP_PROP_FPS),(int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))))2.3视频采集与存储⑤读取视频帧,对视频帧进行高斯模糊,然后写入文件并在窗口显示success,frame=video_capture.read()whilesuccessandnotcv2.waitKey(1)==27:blur_frame=cv2.GaussianBlur(frame,(3,3),0)video_writer.write(blur_frame)cv2.imshow("Video",blur_frame)success,frame=video_capture.read()2.3视频采集与存储⑥回收资源cv2.destroyWindow('Video')video_capture.release()⑦运行程序data文件夹,可以看到生成了名为“test.mp4”data文件夹下同步生成了“test.mp4”042.4图像基本操作理论+实操2.4.1图像像素操作①创建image_operations.py②读取图像,输出第1行、第1列红色分量的值importcv2
img=cv2.imread('data/0000.jpg')red=img[0,0,2]print(red) 结果为1952.4.1图像像素操作③item及itemset的应用#读取红色分量值print(img[10,5,2])print(img.item(10,5,2))#修改红色分量值img.itemset((10,5,2),100)print(img.item(10,5,2))item()方法效率一般,一般用numpy方式来索引数组元素2.4.2图像兴趣区域选取④numpy方式#获取图像中图书区域book=img[2:1247,1230:2145]cv2.imshow("book",book)cv2.waitKey(0)兴趣区域ROI截取的图像兴趣区域book和原始图像一样,在OpenCV中可以调用相同的操作函数,例如:print(book.shape)2.4.3图像通道操作⑤继续添加如下代码:#读取蓝色通道,最后一个值为0b=book[:,:,0]#读取绿色通道,最后一个值为1g=book[:,:,1]#读取红色通道,最后一个值为2r=book[:,:,2]
#分别显示cv2.imshow("b",b)cv2.imshow("g",g)cv2.imshow("r",r)
cv2.waitKey()cv2.destroyAllWindows() 图像通道,由左到右为:B、G、R通道2.4.3图像通道操作⑥以下为OpenCV中的函数,C++常用,Python一般直接操作数组:#图像通道分离b,g,r=cv2.split(book)#图像通道合并book2=cv2.merge((b,g,r))cv2.imshow("book2",book)cv2.waitKey()cv2.destroyAllWindows()
图像通道,由左到右为:B、G、R通道存在不同颜色空间类型,有RGB色彩空间,Gray(灰度)色彩空间,XYZ色彩空间,YCrCb色彩空间,HSV色彩空间,HLS色彩空间,Bayer色彩空间等2.4.4颜色空间转换⑦彩色图像转为灰度图像:#颜色空间转换book_gray=cv2.cvtColor(book,cv2.COLOR_BGR2GRAY)cv2.imshow("book_gray",book_gray)cv2.waitKey()cv2.destroyAllWindows()
色调H的取值范围用角度度量,为0°~360°,如果是灰度图,则H为0。从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°2.4.5图像边框的填充⑧图表绘制工具matplotlib的安装condaactivateopencv4.7pipinstallmatplotlib以上指令需要切换回Anaconda控制台2.4.5图像边框的填充⑨利用copyMakeBorder完成图像边界填充
Frommatplotlibimportpyplotasplt
RED=[255,0,0]Img1=img[1188:1455,1725:2022]Replicate=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)reflect=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)reflect101=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)wrap=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)constant=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=RED)plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT’)plt.show()
2.4.5图像边框的填充⑨利用copyMakeBorder完成图像边界填充
OpenCV添加不同边框效果的展示cv2.copyMakeBorder()src:输入图像top,bottom,left,right:边界宽度borderType:定义要添加的边框类型的标志。它可以是以下类型:cv.BORDER_CONSTANT:添加一个不变的彩色边框。该值应作为下一个参数给出。cv.BORDER_REFLECT:边界将是边界元素的镜像反射,示意如下:fedcba|abcdefgh|hgfedcbcv.BORDER_REFECT_101或cv.BORDER_DEFAULT:与上述相同,但略有变化,示意如下:gfedcb|abcdefgh|gfedcbacv.BORDER_REPICATE:最后一个元素被复制到各处,示意如下:aaaaa|abcdefgh|hhhhhhhcv.BORDER_WRAP-示意如下:cdefgh|abcdefgh|abcdefgvalue:边框类型为cv.border_CONSTANT时,该参数用来设置边框颜色OpenCV添加不同边框效果的展示052.5图像的几何变换理论+实操2.5.1图像几何变换的种类学会看文档:/4.7.0/da/d6e/tutorial_py_geometric_transformations.html2.5.2图像的缩放importcv2
img=cv2.imread('data/0000.jpg')#获取图像宽度和高度,注意OpenCV矩阵索引第1维为行(高度),第2维为列(宽度)height,width=img.shape[:2]
#图像缩放四分之一大小res1=cv2.resize(img,(int(width/4),int(height/4)),interpolation=cv2.INTER_CUBIC)cv2.imshow('resize1',res1)
#第二种缩放方式,fx为横轴缩放比例,fy为纵轴缩放比例res2=cv2.resize(img,dsize=None,fx=0.25,fy=0.25,interpolation=cv2.INTER_CUBIC)
cv2.imshow('resize2',res2)cv2.waitKey(0)cv2.destroyAllWindows()自行操作,运行查看效果①创建image_
geometric_trans.py,输入代码:2.5.2图像的缩放参数意义:cv2.resize()中interpolation参数的意思为插值。插值:当图像缩放时,假设为放大操作,则图像的像素之间出现了空隙,填充空隙的方法称为插值。CV_INTER_NN:最近邻插值CV_INTER_LINEAR:双线性插值(缺省使用)
CV_INTER_AREA:使用像素关系重采样,当图像缩小时,该方法可以避免波纹出现,当图像放大时,类似于CV_INTER_NNCV_INTER_CUBIC:立方插值2.5.3图像的平移#导入矩阵库numpyimportnumpyasnp#读取行、列信息rows,cols=res1.shape[:2]#构建变换矩阵M=np.float32([[1,0,100],[0,1,50]])#位移操作translate=cv2.warpAffine(res1,M,(cols,rows))
cv2.imshow('translate',translate)cv2.waitKey(0)cv2.destroyAllWindows()设在x方向平移width个单位,计算如下:②继续在image_
geometric_trans.py中输入:2.5.3图像的平移运行结果变换函数:translate=cv2.warpAffine(res1,M,(cols,rows))cv.warpAffine()函数的第三个参数是输出图像的大小,其形式应为“(宽度、高度)”需要记住:OpenCV中width=列数,height=行数变换函数2.5.4图像的旋转#构建旋转矩阵,这里cols-1和rows-1是图像坐标值上限M=cv2.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),90,1)rotate=cv2.warpAffine(res1,M,(cols,rows))
cv2.imshow('rotate',rotate)cv2.waitKey(0)cv2.destroyAllWindows()逆时针90°③继续在image_
geometric_trans.py中输入:2.5.5图像的透视变换#存储res1.jpg,方便进行标定cv2.imwrite("data/res1.jpg",res1)
#透视变换对应关系pts1=np.float32([[69,0],[563,8],[25,479],[601,479]])pts2=np.float32([[0,0],[576,0],[0,479],[576,479]])M=cv2.getPerspectiveTransform(pts1,pts2)warp_persp=cv2.warpPerspective(res1,M,(576,479))
#存储变形后图像cv2.imwrite("data/warp_persp.jpg",warp_persp)#显示图像cv2.imshow('perspective',warp_persp)cv2.waitKey(0)cv2.destroyAllWindows()透视变换④继续在image_
geometric_trans.py中输入062.6基于颜色的目标追踪项目实战2.6.1任务流程拍摄视频的每一帧从BGR转换到HSV空间知识点:2.3节视频采集知识点:2.4节色彩空间提取目标颜色完成追踪设置追踪颜色阈值新知识点:bitwise_and2.6.2代码实现①创建名为“color_tracking.py”的文件②输入代码:importcv2importnumpyasnp
#读取摄像头cap=cv2.VideoCapture(0)while(1):#获取图像帧_,frame=cap.read()#颜色空间转换:BGRtoHSVhsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)#在HSV空间中定义追踪的颜色阈值范围lower_blue=np.array([110,50
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 锅炉设备检修工安全培训效果强化考核试卷含答案
- 厂矿用机车司机安全风险测试考核试卷含答案
- 整模脱模工创新应用知识考核试卷含答案
- 化工萃取工冲突解决能力考核试卷含答案
- 2026年新科教版初中九年级历史上册第三单元工业革命与社会变迁卷含答案
- 塑料着色工操作知识强化考核试卷含答案
- 农业地质调查员岗前实操知识技能考核试卷含答案
- 客车检车员诚信品质考核试卷含答案
- 木焦油工达标评优考核试卷含答案
- 掘进及凿岩机械装配调试工岗前安全技能考核试卷含答案
- 医学免疫学英文版课件:Complement system补体系统
- 高考议论文写作指导课件
- 金蝉使用说明书
- GB/T 2423.16-2022环境试验第2部分:试验方法试验J和导则:长霉
- GB/T 629-1997化学试剂氢氧化钠
- GB/T 27679-2011铜、铅、锌和镍精矿检查取样精密度的实验方法
- 《统计法实施条例》解读
- 汽车电气设备与维修课程标准
- 浣花溪公园植物调查报告课件
- 幼师口语朗读训练课件
- 小学硬笔书法课教案(1-30节)
评论
0/150
提交评论