OpenCV Python 4.0安装与开发注意事项

OpenCV4.0发布已经快两个月啦,Python社区终于推出了OpenCV Python4.0的安装包与扩展模块安装包,下载地址如下:

https://pypi.org/project/opencv-python/

安装OpenCV-Python

如果你是第一次使用OpenCV Python开发包,想要安装OpenCV Python4.0只要执行如下命令行即可:

pip install opencv-python
上述命令行会成功安装OpenCV4.0开发包

如果你还想使用OpenCV Python的扩展模块,执行如下命令行即可:

pip install opencv-contrib-python
上述命令行会既安装OpenCV4.0 release模块又安装扩展模块
如果你已经安装了OpenCV以前的3.x版本只需要执行对应的升级安装命令行如下(假设你已经安装opencv-python 3.x)
pip install –upgrade opencv-python
即可升级安装到最新OpenCV 4.0的Python语言开发包。
如果在安装的时候遇到python命令不识别或者pip命令行不识别,请执行如下的命令行实现安装:
python –m pip install opencv-python
或者
python –m pip install opencv-contrib-python

安装好以后打开pycharm IDE,执行如下测试代码

import cv2 as cv

src = cv.imread("D:/images/test5.png")
cv.imshow("opencv-python", src)
cv.waitKey(0)
cv.destroyAllWindows()

运行显示如下:

OpenCV Python 4.0安装与开发注意事项_第1张图片

 

重大改动

注意这些改变只存在与OpenCV-Python与OpenCV-Contrib-Python开发包中
1.在扩展模块中去掉了SIFT与SURF相关API的调用文件
现在如果想在OpenCV Python 4.x中想使用SIFT与SURF只有靠自己从源代码CMake来编译生成python版本的安装包才可以。

2.全部取消CV_XXX这种枚举类型,比如在3.x中可以正常使用的语句

# OpenCV 3.x中
namedWindow(“input”, cv.CV_WINDOW_AUTOSIZE)

# OpenCV4.x
namedWindow(“input”, cv.WINDOW_AUTOSIZE)

3.findContours函数返回结果由3.x的三个参数变为两个参数

# 在OpenCV3.x中轮廓发现API返回三个值分别为
# image 返回的图像
# contours 每个轮廓的点集合
# hierarchy 每个轮廓对应的层次信息
binary, contours, hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

OpenCV4.0中需要改为

contours, hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

4.增加了python语言版本的对DNN模块的加持!
支持图像分类、对象检测(SSD、RCNN、Faster-RCNN、mask-RCNN)、图像分割等网络的使用,而且代码特别简洁,以图像分类Inception h5模型代码调用为例,演示如下:

import cv2 as cv
import numpy as np

bin_model = "D:/projects/opencv_tutorial/data/models/googlenet/bvlc_googlenet.caffemodel"
protxt = "D:/projects/opencv_tutorial/data/models/googlenet/bvlc_googlenet.prototxt"

# Load names of classes
classes = None
with open("classification_classes_ILSVRC2012.txt", 'rt') as f:
    classes = f.read().rstrip('\n').split('\n')

# Load a network
net = cv.dnn.readNetFromCaffe(protxt, bin_model)

winName = 'Deep learning image classification in OpenCV'
cv.namedWindow(winName, cv.WINDOW_AUTOSIZE)

cap = cv.VideoCapture("D:/images/video/lane.avi")
while cv.waitKey(1) < 0:
    hasFrame, frame = cap.read()
    if not hasFrame:
        cv.waitKey()
        break
    result = np.copy(frame)
    # Create a 4D blob from a frame.
    blob = cv.dnn.blobFromImage(frame, 1.0, (224, 224), (104, 117,123), False, crop=False)

    # Run a model
    net.setInput(blob)
    out = net.forward()

    # Get a class with a highest score.
    out = out.flatten()
    classId = np.argmax(out)
    confidence = out[classId]

    # Put efficiency information.
    t, _ = net.getPerfProfile()
    label = 'Inference time: %.2f ms' % (t * 1000.0 / cv.getTickFrequency())
    cv.putText(result, label, (0, 15), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0))

    # Print predicted class.
    label = '%s: %.4f' % (classes[classId] if classes else 'Class #%d' % classId, confidence)
    cv.putText(result, label, (100, 50), cv.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), 2)
    cv.imshow(winName, result)

运行截图如下

OpenCV Python 4.0安装与开发注意事项_第2张图片

 

5.最不可思议的改动-级联检测器训练工具不见啦

-opencv_createsamples
-opencv_traincascade
 

上述两个级联检测器训练的工具居然神奇的从release模块中消失啦,而且在OpenCV4.0的官方release notes中居然没有任何说明!望周知!想训练级联检测器千万别用4.0.x的版本了。

总结
OpenCV4.0已经更新了有一段时间了,从C++ API到这几天刚刚出炉的OpenCV-Python API我一直在不断使用,调用常见模块大多数的相关API,总来说接口规范比以前进步很大,很多算法的API都用过同一个API给予不同的参数即可调用,大部分接口采用了代码实现与API分离的设计原则,极大的降低了学习成本,有利于初学者更快的学习入门。

你可能感兴趣的:(Opencv,视觉算法,python)