星標或者置頂【OpenCV學堂】
乾貨文章與技術教程第一時間送達
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與OpenCV-Contrib-Python開發包中
1.在擴展模塊中去掉了SIFT與SURF相關API的調用文件
現在如果想在OpenCV Python 4.x中想使用SIFT與SURF只有靠自己從原始碼CMake來編譯生成python版本的安裝包才可以。
2.全部取消CV_XXX這種枚舉類型,比如在3.x中可以正常使用的語句
namedWindow(「input」, cv.CV_WINDOW_AUTOSIZE)
namedWindow(「input」, cv.WINDOW_AUTOSIZE)
3.findContours函數返回結果由3.x的三個參數變為兩個參數
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"
classes = None
with open("classification_classes_ILSVRC2012.txt", 'rt') as f:
classes = f.read().rstrip('\n').split('\n')
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)
blob = cv.dnn.blobFromImage(frame, 1.0, (224, 224), (104, 117,123), False, crop=False)
net.setInput(blob)
out = net.forward()
out = out.flatten()
classId = np.argmax(out)
confidence = out[classId]
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))
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)
運行截圖如下
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研習社】
推薦閱讀
OpenCV學堂-原創精華文章
《tensorflow零基礎入門視頻教程》
基於OpenCV與tensorflow實現實時手勢識別
圖像分割網絡FCN詳解與代碼實現
深度學習中的反向卷積
OpenCV SIFT特徵算法詳解與使用
HOG特徵詳解與行人檢測
教程|OpenCV場景文字檢測
Selective Search算法與演示
聽說點【好看】會有好運來