• 技术文章 >常见问题 >Python常见问题

    python怎么使用opencv

    爱喝马黛茶的安东尼爱喝马黛茶的安东尼2019-11-27 11:19:01原创4709

    OpenCV是一个旨在解决计算机视觉问题的Python库。OpenCV最初由Intel在1999年开发,但是后来由Willow Garage资助。它支持很多编程语言,如C++,Python,Java等等。它也支持多种平台,包括Windows,Linux和MacOS。

    OpenCV Python只是一个与Python一起使用的原始C++库的包装类。通过使用它,所有OpenCV数组结构都能被转化为NumPy数组或从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,就意味着这个将被导入的图片是黑白图片。这里的图片名称是“Penguins”。很简单吧?

    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进行人脸检测

    这看起来很复杂,但实际上很容易。 让我带你了解整个过程,然后你也会有同样的感受。

    第一步:想一想我们的先决条件。我们首先需要一个图像。然后,我们需要创建一个级联分类器,它最后会给我们提供面部特征。

    第二步:这一步要使用到OpenCV读取图像和特征文件。所以这个时候,原始数据点是NumPy数组的形式。

    我们要做的就是搜索面部 NumPy n维数组的行和列的值。这是具有面部矩形坐标的数组。

    第三步:最后一步是使用矩形面框显示图像。

    看看下面的图片,这里我以图片的形式总结了上述的三个步骤以便于阅读:

    非常直接明了,对吧?

    34aa0dbbeb6238db71883a47a658d4f.png

    首先,如之前所述,我们创建CascadeClassifier对象来提取面部特征。包含面部特征的XML文件路径是此处的参数。

    下一步是读取一个包含面部的图片,并且使用COLOR_BGR2GREY将其转化为黑白图片。接下来,我们搜索图像的坐标。这是使用detectMultiScale来实现的。

    你问什么坐标?它是面部矩形的坐标。scaleFactor被用来减小5%的形状值,直到找到面部。因此,总的来说,值越小,准确度越高。

    最后,这张脸被显示到窗口。

    给识别的人脸添加矩形面框

    这个逻辑很简单——就像使用for循环语句一样简单。看看下面的图片:

    c384501924991c579095d38c264fad5.png

    我们通过传递参数(比如图片对象,轮廓框的RGB值和矩形的宽度),使用cv2.rectangle来定义方法以创建一个矩形。

    让我们来看看面部检测的完整代码:

    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学习网,欢迎在线学习!

    专题推荐:python 使用 opencv
    品易云
    上一篇:python怎么安装anacoda 下一篇:python怎么汉化

    相关文章推荐

    • python opencv怎么安装

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网