OpenCV 是一个 Python 库,旨在解决计算机视觉问题。 OpenCV 最初由 Intel 于 1999 年开发,但后来由 Willow Garage 资助。它支持多种编程语言,例如 C++、Python、Java 等等。它还支持多种平台,包括 Windows、Linux 和 MacOS。
OpenCV Python 只是用于 Python 的原始 C++ 库的包装类。使用它,所有 OpenCV 数组结构都可以与 NumPy 数组相互转换。这使得它很容易与其他使用 NumPy 的库集成。例如,像 SciPy 和 Matplotlib 这样的库。
OpenCV的基础操作?
Opencv 可以执行以下从加载图像到调整大小的基本操作:
使用OpenCV加载图片
查看图片形状/分辨率
显示图片
调整图像大小
1. 使用OpenCV加载图片
Import cv2
# colored Image
Img = cv2.imread ("Penguins.jpg",1)
# Black and White (gray scale)
Img_1 = cv2.imread ("Penguins.jpg",0)
如以上代码所示,第一个要求是导入OpenCV模块。
之后,我们可以使用 imread 模块读取图像。参数中的 1 表示这是彩色图像。如果该参数的值为0,则表示要导入的图像是黑白图像。这里的图像名称是“企鹅”。很简单,对吧?
2. 查看图片形状/分辨率
我们可以使用 shape 子函数来输出图像的形状。看看下面的代码:
Import cv2
# Black and White (gray scale)
Img = cv2.imread ("Penguins.jpg",0)
Print(img.shape)
图片的形状是指 NumPy 数组的形状。执行代码后,你将看到该矩阵由 768 行和 1024 列组成。
3. 显示图片
使用OpenCV显示图片非常简单和直接。思考以下图片:
import cv2
# Black and White (gray scale)
Img = cv2.imread ("Penguins.jpg",0)
cv2.imshow("Penguins", img)
cv2.waitKey(0)
# cv2.waitKey(2000)
cv2.destroyAllWindows()
如你所见,我们首先使用 imread 导入图像。我们需要一个输出窗口来显示这个图像,对吧?
然后,我们等待用户事件。 waitKey 使窗口保持静态,直到用户按下一个键。传入的参数是以毫秒为单位的时间。
最后,我们根据waitForKey的参数使用destroyAllWindows关闭窗口。
4. 调整图像大小
同样,调整图像大小也非常简单。这是另一个代码片段:
import cv2
# Black and White (gray scale)
img = cv2.imread ("Penguins.jpg",0)
resized_image = cv2.resize(img, (650,500))
cv2.imshow("Penguins", resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这里,resize 函数用于将图像大小调整为所需的形状。这里的参数是新调整大小的图像的形状。
与之前的代码相比,剩下的代码非常简单,对吗?
我相信你们对企鹅很好奇,这是我们想要输出的图片!
这是另一个向resize函数传递参数的方法。看看下面的表示方法:
Resized_image = cv2.resize(img, int(img.shape[1]/2), int(img.shape[0]/2)))
在这里,我们得到一个大小为原始图像一半的新图像。
使用OpenCV进行人脸检测
这看起来很复杂,但实际上很容易。让我带你完成整个过程,然后你会有同样的感觉。
第 1 步:考虑我们的先决条件。我们首先需要一个图像。然后,我们需要创建一个级联分类器,最后会给我们提供面部特征。
第2步:这一步使用OpenCV读取图像和特征文件。所以这一次,原始数据点是 NumPy 数组的形式。
我们所要做的就是搜索 NumPy n 维人脸数组的行值和列值。这是一个包含面部矩形坐标的数组。
第三步:最后一步是使用矩形面框显示图像。
看看下图,我以图形的形式总结了以上三个步骤,方便阅读:
非常直接明了,对吧?
首先,如前所述,我们创建 CascadeClassifier 对象来提取面部特征。包含面部特征的 XML 文件的路径是这里的参数。
下一步是读取包含人脸的图像并使用 COLOR_BGR2GREY 将其转换为黑白。接下来,我们搜索图像的坐标。这是使用detectMultiScale 实现的。
你问的是什么坐标?它是面部矩形的坐标。 scaleFactor 用于将形状值减少 5%,直到找到人脸。所以一般来说,这个值越小,准确率就越好。
最后,这张脸被显示到窗口。
给识别的人脸添加矩形面框
逻辑很简单——就像使用 for 循环语句一样简单。看看下面的图片:
我们使用 cv2.rectangle 定义一个方法,通过传递图像对象、轮廓框的 RGB 值和矩形的宽度等参数来创建矩形。
让我们来看看面部检测的完整代码:
import cv2
# Create a CascadeClassifier Object
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# Reading the image as it is
img = cv2.imread("photo.jpg")
# Reading the image as gray scale image
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Search the co-ordintes of the image
faces = face_cascade.detectMultiScale(gray_img, scaleFactor = 1.05, minNeighbors=5)
for x,y,w,h in faces:
img = cv2.rectangle(img, (x,y), (x+w,y+h),(0,255,0),3)
resized = cv2.resize(img, (int(img.shape[1]/7),int(img.shape[0]/7)))
cv2.imshow("Gray", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
众多
,尽在python学习网,欢迎在线学习!
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python序列解包的使用09/29
- ♥ python语句加分号吗?11/20
- ♥ 你可以在手机上使用python吗?10/14
- ♥ Python数据可视化库有哪些10/23
- ♥ 学习python用什么教材09/14
- ♥ python中求最小公倍数的两种方法09/04
内容反馈