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

news2024/12/26 13:26:48

系列文章目录

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

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

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

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

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

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

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


文章目录

  • 系列文章目录
  • 前言
  • 一、重点掌握
    • 第一章 OpenCV起步
    • 第二章 图像处理基础
    • 第三章 图形用户界面
    • 第四章 图像变换
    • 第五章 边缘和轮廓
    • 第六章 直方图
    • 第七章 模版匹配和图像分割
    • 第八章 特征检测
  • 二、编程题
    • 第二章习题
    • 第五章习题
  • 总结


前言


一、重点掌握

填空(15个题),判断(10个题),简答(1个题)共60分。

第一章 OpenCV起步

  • 安装安装opencv-python的命令是pip install opencv-python
  • 安装Numpy命令是pip install Numpy

第二章 图像处理基础

  • 在Python程序中,OpenCV使用NumPy数组来存储图像。 OpenCV默认的图像格式为BGR,即3通道图像数组的3个维度依次为B(蓝色)、G(绿色)和R(红色)通道的像素。
  • 使用zeros()函数创建数组,数组元素默认值是0
  • img.shape的输出结果为(512,512,3),说明表示彩色图像的一个三维数组,3个值依次表示图像的高度、宽度和通道数;图像的分辨率为512x512
  • OpenCV播放视频的实质是逐读取和显示图像。 通常,计算机将灰度处理为256级,0表示黑色255表示白色。
    cv2.split()函数用于拆分通道。
  • 在图像处理基础中,加法运算符“+”和cv2.add()函数的区别?
    答:用“+”运算符执行两个图像数组加法时,如果两个像素相加大于256,则会将其按256取模。cv2.add()函数执行两个图像数组加法时,如果两个像素相加大于256,则取255。

第三章 图形用户界面

  • 绘制矩形的函数是cv2.rectangle() ,绘制圆的函数是cv2.circle()
  • 绘制椭圆的函数是cv2.ellipse()
  • 绘制文本的函数是cv2.putText()

第四章 图像变换

  • cv2.COLOR_BGR2RGB:将BGR色彩空间转换为RGB色彩空间。
  • GRAY色彩空间通常指8位灰度图像,其颜色取值范围是**[0,256]** 。
  • YCrCb色彩空间用亮度Y、红色Cr和蓝色Cb表示图像。
  • 图像翻转函数是cv2.flip()
  • HSV色彩空间使用色调、饱和度和亮度表示图像。
  • 仿射变换包含了平移、旋转、缩放等操作。
  • 图像模糊主要目的是消除图像噪声和边缘。
  • 均值滤波是指以当前点为中心,用其周围N x N个点像素值的平均值代替当前点的像素值。
  • 中值滤波是取中间值作为邻域中心点的像素值。
  • 开运算先将图像执行腐蚀操作,再对腐蚀结果执行膨胀操作。

第五章 边缘和轮廓

  • 图像的边缘是指图像中灰度值发生急剧变化的位置,边缘检测的目的是为了绘制出边缘线条
  • 边缘检测的结果通常为黑白图像,图像中的白色线条表示边缘

第六章 直方图

  • 直方图横坐标表示图像像素的灰度级,纵坐标表示像素灰度级的数量。
  • 二维直方图统计像素的色相饱和度,用于查找图像的颜色直方图。

第七章 模版匹配和图像分割

  • 模板匹配是指在当前图像中查找与目标图像相近的部分。图像分割是指将前景对象从图像中分割或提取出来。
  • 单目标匹配是指输入图像中只存在一个可能匹配结果

第八章 特征检测

  • ORB特征检测以FAST特征检测器和BRIEF描述符为基础进行了改进,以获得更好的特征检测性能。
    FAST特征检测器主要根据像素周围16个像素的强度和阈值参数来判断像素是否为关键点。

二、编程题

两个编程题,共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()                         #关闭所有窗口

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/100371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Win32 API 渲染一个标准界面元素

有这么一个Win32 API,名叫 DrawFrameControl,它可以用来在你的自定义控件上渲染一些标准的窗口元素。 下面我们举一个简单的例子来说明。 在下面的例子中,我们会使用这个 API 函数来绘制一个已选择的单选按钮。具体方法是,在我们…

常见面试题(随机)

常问的几个方面 1.MySQL 存储引擎、事务、锁、索引 2.Redis 数据类型、过期策略、淘汰策略、缓存穿透、缓存击穿、缓存雪崩、分布式锁 3. Spring Spring Ioc、Spring AOP、Spring MVC MYSQL 存储引擎 事务 事务的特性 原子性、一致性、隔离性、持久性事务的隔离性并发异常:…

Stm32标准库函数2——多通道ADC DMA

#include "stm32f10x.h" //在该头文件中默认定义系统时钟为72M #include "delay.h" #include "sys.h" #include "usart.h" #include "adc.h" #include "DMA.h" //串口:A9 A10,波特率11…

linux-12月第四周-磁盘存储和文件系统

文章目录管理存储使用磁盘空间过程为什么要磁盘分区划分分区的方式MBR管理存储 使用磁盘空间过程 买来一块新硬盘后,有以下三个使用步骤 第一步:划分分区(将硬盘划分为若干个分区,windows上的C盘,D盘,E盘…

SCUT01在线协作白板技术解决方案

在七牛云校园黑客马拉松中,来自华南理工大学的SCUT01团队,为我们带来了UI精美、体验优秀的白板作品,在大赛中获得二等奖的好成绩。以下是这款在线协作白板的技术解决方案。 背景 疫情背景下,线上课堂、线上会议等业务背景下都有着…

PCL 点云配准衡量指标

0. 简介 PCL作为目前最为强大的点云库,内部存在有大量集成好的算法。而对于数据量大、非同源、含大量噪声且部分重叠的激光点云与影像重建点云,其稀疏程度、噪声程度等不同,非重叠区域的面积很大。真实场景的点云尤其是影像重建点云噪声较多…

用javascript分类刷leetcode23.并查集(图文视频讲解)

并查集(union & find):用于处理一些元素的合并和查询问题 Find:确定元素属于哪一个子集,他可以被用来确定两个元素是否属于同一个子集,加入路径压缩,复杂度近乎O(1) Union:将两…

如何在 ESXi 7.x 上安装 Windows Server 2019

安装 Windows Server 2019 连接 ESXi 7.0上传 Windows Server 2019 镜像创建虚拟机安装 Windows Server 2019在本文中,我们将逐步在 ESXi 7.x 上安装 Windows Server 2019。 连接 ESXi 7.0 使用 VMware 主机或 vSphere Web 客户端连接到 VMware vSphere Hypervisor 7.0(ESX…

Unity-ROS与话题与服务(二)

0. 简介 对于ROS而言,其最常用的就是Topic话题以及Service两个了。之前我们在了解Unity Robotics Hub时候就了解到基本的Unity和ROS的通讯,下面我们来详细介绍一下Unity与ROS的话题与服务。 ROS和Unity之间的通信是通过Unity的“ROS-TCP-Connector”软…

Linux学习07-vim程序编辑器

1 vi与vim vi 是老式的文书处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具,就连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个“程序开发工具”而…

服务器内存CPU负载监控

1,系统平均负载(Load average): 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树,一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的…

SpringBoot+MDC实现链路调用日志

1.首先介绍什么是MDC MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback及log4j2 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。MDC 中包含的…

毕业设计 STM32自行车智能无线防盗报警器 -物联网 单片机 嵌入式

0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过…

【C++进阶】C++11新特性下篇(万字详解)

🎇C学习历程:入门 博客主页:一起去看日落吗持续分享博主的C学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…

京东前端高频vue面试题(边面边更)

Redux 和 Vuex 有什么区别,它们的共同思想 (1)Redux 和 Vuex区别 Vuex改进了Redux中的Action和Reducer函数,以mutations变化函数取代Reducer,无需switch,只需在对应的mutation函数里改变state值即可Vuex由…

【树莓派】擦灰重启行动

高中时候看大佬各种秀项目,于是乎兴致冲冲买了一块树莓派4B,400r,当时没想到光是开机,就折腾了两个星期~后来不出意外它在房间的角落很安逸地吃灰,但是,后来,我误打误撞学了CS,再误打…

Okhttp源码分析实践(五)【实践环节:Okhttp的基本框架搭建请求实现】

http的基础知识、okhttp的框架基本源码,我们通过之前课程都已学习总结过,接下来,就是关键的实践课程。 各位coder,需要紧跟小编脚步,要开始加速飙车了。 1.基本框架的搭建实现 既然不知道如何入手,我们不妨就以okhttp的基本使用代码为例,作为入手点,去开始编程实现。…

机器学习理论介绍

前言 图灵奖获得者、著名数据库专家James Gray 博士观察并总结人类自古以来,在科学研究上,先后历经了实验、理论、计算和数据四种范式。 科学研究第一种范式:实验 在古代,人们的认知水平较低,对事物的认识很大程度上…

React redux使用

1.redux是什么 redux是一个专门用于状态管理的JS库(不是react插件库) 它可以用在react,angular,vue等项目中,但基本与react配合使用 作用:集中式管理react应用中多个组件共享的状态 2.为什么要使用redux 某个组件的状态&#…