opencv学习笔记-OpenCV常⽤的7个⽰例
OpenCV
OpenCV是计算机视觉领域最流⾏的库之⼀。它最初是⽤ C 和 C++ 编写的。现在也可以在 Python 中使⽤。它最初是由英特尔开发的。该库是⼀个跨平台的开源库。免费使⽤。OpenCV 库是⼀个⾼度优化的库,其主要重点是实时应⽤程序。
OpenCV 库是2500多个优化算法的组合。它可以⽤来检测和识别不同的⼈脸,在图像中或实时识别物体,使⽤视频和⽹络摄像头分类不同的⼈类⾏为,跟踪摄像机的运动,跟踪像汽车、⼈类等移动物体,实时计数物体,将图像拼接在⼀起产⽣⾼分辨率图像,从图像数据库中到类似的图像,从使⽤闪光灯拍摄的图像中去除红眼,提⾼图像质量,跟踪眼球运动,跟踪⼈脸等
它拥有⼤约4.7万活跃⽤户社区,估计下载量超过1800万次。许多⼤公司,如⾕歌,亚马逊,特斯拉,微软,本⽥等使⽤OpenCV,使他们的产品更好,更智能。
先决条件
在开始编写代码之前,我们需要在我们的设备上安装 OpenCV 。如果你是专业的编程⼈员并且知道每⼀个 IDE,那么去 Pycharm 并且在设置中从它的包管理器中安装 OpenCV-python。
如果您是初学者或中级程序员,或者只是想关注该博客,那么我们将使⽤代码编辑器⽽不是IDE。只需转到Visual Studio Code⽹站并根据您的操作系统下载最新版本即可。现在,我们将创建⼀个虚拟环境,在其中将安装 OpenCV。打开终端,然后使⽤cd定位到桌⾯。使⽤名为opencv的mkdir创建⼀个⽂件夹然后在以下命令中运⾏。
python -m venv env
现在使⽤ env\scripts\activate 命令激活环境,你会看到在 C:\Users\username\Desktop\opencv 前出现⼀个带⼩括号的 (env)。现在只需使⽤ pip 安装 OpenCV。
pip install opencv-python
我们将在这个博客中涵盖7个主题:
读、写和展⽰⼀个图像
读取视频与集成⽹络摄像头
缩放和裁剪图像
使⽤函数的基本图像滤波器
绘制不同的形状
在图像上写⽂字
检测和裁剪⼈脸
读、写和展⽰⼀个图像
为了使⽤ OpenCV 读取图像,我们使⽤函数 imread() ,为了显⽰图像,我们使⽤函数 imshow() ,为了写⼊图像,我们使⽤函数imwrite()。让我们看看每⼀个的语法。
imread():
img = cv2.imread("PATH_TO_IMAGE.jpg/png")
Example
img = imread("images/dog0.jpg")
imshow():
cv2.imshow("WINDOW NAME",IMG_VAR)
Example
imshow("Dog Image",img)
imwrite():
cv2.imwrite(FILENAME, IMAGE)
filename: A string representing the file name. The filename must include image format like .jpg,.png, etc.
image: It is the image that is to be saved.
Example
cv2.imwrite('images/img',img)
读取视频与集成⽹络摄像头
读取视频⽂件与读取 OpenCV 中的图像⽂件⾮常相似。不同之处在于我们使⽤ cv2.videocapture()
语法
video = cv2.VideoCapture("FILEPATH.mp4")
Example
video = cv2.VideoCapture("video/dog/dog.mp4")
视频是许多帧图像在⼀起的集合,每⼀帧都是⼀个图像。要使⽤ OpenCV 观看视频,我们只需要使⽤ while 循环显⽰视频的每⼀帧。
while True:
success , img = ad()
cv2.imshow("Video",img)
if cv2.waitKey(1)&0xff==ord('q'):##key 'q' will break the loop
break
为了与⽹络摄像头集成,我们需要传递⽹络摄像头的端⼝值,⽽不是路径到视频。如果你使⽤的是笔记本电脑,没有连接任何外部摄像头,那么简单地传递0,如果你连接了任何外部摄像头,那么传递⼀
个摄像头端⼝值。
cap = cv2.VideoCapture(0)
cap.set(3,640)## Frame width
cap.set(4,480)## Frame Height
cap.set(10,100)## Brightness
while True:
success, img = ad()
cv2.imshow("Video",img)
if cv2.waitKey(1)&0xff==ord('q'):
break
缩放和裁剪图像
缩放是⼀个改变图像形状的过程。在 Opencv,我们可以使⽤ resize 函数来调整图像的形状。
语法
IMG: image which we want to resize
WIDTH: new width of the resize image
HEIGHT: new height of the resize image
Example
要调整图像的⼤⼩,我们⾸先需要知道图像的形状。我们可以利⽤ shape 到图像的形状,然后根据当前图像的形状,我们可以增⼤或减⼩图像的⼤⼩。让我们举个例⼦来看看。
import cv2
img = cv2.imread("images/img0.jpg")##Choose any image
print(img.shape)
imgResize = size(img,(224,224))##Decrease size
imgResize2 = size(img,(1024,1024))##Increase size
cv2.imshow("Image",img)
cv2.imshow("Image Resize",imgResize)
cv2.imshow("Image Increase size",imgResize2)
print(imgResize.shape)
cv2.waitKey(0)
如果您不想把图像宽度和⾼度写死,您也可以根据现有的形状,然后根据⽐例改变图像的宽度和⾼度。
import cv2
img = cv2.imread("images/img0.jpg")##Choose any image
print(img.shape)
shape = img.shape
imgResize = size(img,(shape[0]//2,shape[1]//2))##Decrease size
imgResize2 = size(img,(shape[0]*2,shape[1]*2))##Increase size
cv2.imshow("Image",img)
cv2.imshow("Image Resize",imgResize)
cv2.imshow("Image Increase size",imgResize2)
print(imgResize.shape)
cv2.waitKey(0)
裁剪图像
裁剪是获取部分图像的过程。在 OpenCV 中,我们可以通过定义裁剪后的矩形坐标来执⾏裁剪。
语法
imgCropped = img[y1:y2, x1:x2](x1,y1): top-left vertex
(x2,y2): bottom-right vertex
Example
imgCropped = img[0:100,200:200]
使⽤裁剪⽅法,让我们尝试从图像中提取 Monalisa 的脸。
import cv2
img = cv2.imread("images/img0.jpg")
imgCropped = img[50:250,120:330]
cv2.imshow("Image cropped",imgCropped)
cv2.imshow("Image",img)
cv2.waitKey(0)
还可以使⽤绘画模式来查(x1,y1)、(x2,y2)的正确坐标。
这⾥有个⼩任务:
任务:右键单击图像并保存它; 尝试从图像中获取国王卡。
提⽰:使⽤绘画模式到正确的坐标,最后,使⽤调整⼤⼩,以增加裁剪图像的⼤⼩。
使⽤函数的基本图像滤波器
我们可以在图像上使⽤许多基本的滤波器,⽐如将图⽚转换成灰度、模糊等等。
从 Img 到 gray
为了将图像从彩⾊图像转换为灰度图像,我们可以使⽤函数 cv2.cvtColor,在这⾥我们传递 cv2.COLOR_BGR2GRAY 作为参数。
语法
imgGray = cv2.cvtColor(IMG,cv2.CODE)
IMG: Original imagerectangle函数opencv
CODE: Conversion code for Gray(COLOR_BGR2GRAY)
Example
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
从 Img 到 HSV
为了将图像转换为 HSV 颜⾊空间,我们可以使⽤函数 cv2.cvtColor,这⾥我们传递 cv2.COLOR_BGR2HSV 作为参数。它主要⽤于⽬标跟踪。
语法
imgGray = cv2.cvtColor(IMG,cv2.CODE)
IMG: Original image
CODE: Conversion code for Gray(COLOR_BGR2HSV)
Example
imgHsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
模糊图像
模糊⽤于去除图像中的噪声,也称为平滑。它是对图像应⽤低通滤波器的过程。在 OpenCV 中对图像进⾏模糊,我们常⽤GaussianBlur。
语法
imgBlur = cv2.GaussianBlur(img,(sigmaX,sigmaY),kernalSize)
kernalsize − A Size object representing the size of the kernel.
sigmaX − A variable representing the Gaussian kernel standard deviation in X direction.
sigmaY - same as sigmaX
Exmaple
imgBlur = cv2.GaussianBlur(img,(3,3),0)
边缘检测
在 OpenCV 中,我们使⽤ Canny算⼦来检测图像中的边缘。也有不同的边缘检测器,但最著名的是 Canny算⼦。Canny算⼦边缘检测是⼀种边缘检测算⼦,它使⽤多级算法来检测图像中的⼤范围边缘,
是由 John F. Canny 在1986年提出的。
语法
imgCanny = cv2.Canny(img,threshold1,threshold2)
threshold1,threshold2:Different values of threshold different for every images
Example
imgCanny = cv2.Canny(img,100,150)
膨胀
膨胀被⽤来增加图像中边缘的⼤⼩。⾸先,我们定义了奇数(5,5)的核矩阵⼤⼩。然后使⽤内核,我们对图像执⾏膨胀。下⾯我们对 Canny 算⼦的输出图像进⾏了膨胀。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论