linux/ubuntu下最簡單好用的python opencv安裝教程 ( 解決 imshow, SIFT, SURF, CSRT使用問題)

但願這篇文章能完全幫你解決python opencv安裝和使用中的常見問題.html

懶人請直奔這一節, 一條命令安裝 opencvpython

使用python-opencv經常使用的問題

在linux中使用python版的opencv相信你們都會遇到各類問題, 常見的問題好比:linux

  1. imshow 沒法使用, 會出現以下警告. 這是由於python-opencv沒有編譯gtk, 網上的解決方法可能會推薦你從新編譯什麼的, 太過麻煩, 也不必定能解決.
    cv2.error: OpenCV(4.1.0) /io/opencv/modules/highgui/src/window.cpp:627: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'算法

  2. 一些opencv的nonfree特性沒法使用, 比方說 SIFT, SURF 等等, 以及一些較新的算法如CSRT沒有實現.bash

最簡單好用的python opencv安裝

下面這個版本是帶nonfree特性(sift, surf) ,contrib功能及一些較新的算法(CSRT跟蹤器), 以及gtk編譯imshow可正常使用的功能,推薦安裝.app

可能會用到conda, conda命令不熟悉的歡迎來我這篇文章查一下.測試

卸載所有其餘python版本的opencv

若是你肯定沒有安裝過python版的opencv, 那直接跳過這一步就行了.ui

# 首先看看系統上是否安裝了opencv
# 若是你使用了 conda 環境, 用以下命令列出所有的opencv包
conda list opencv
# 注意: conda列出來的包, 每行末尾有pypi的要經過pip卸載, 沒有pypi的經過conda卸載
# 若是沒有conda, 那就用pip 看一下
pip list | grep opencv

conda list opencv 的結果以下:
google

# 而後就能看到裝過的各類版本的opencv, 卸載這些opencv
# conda 卸載參考
conda uninstall xxx-opencv-xxx
# pip 卸載參考, 在我上面這張圖中, 須要
pip uninstall opencv-contrib-python

安裝opencv

注意其餘的opencv必定要先卸載乾淨哦!code

pip install opencv-contrib-python==3.4.2.16

這樣就安裝好啦, 很簡單是吧, 其實最關鍵的問題就是找到這個特殊的版本.

opencv-contrib-python 是帶contrib特性的opencv版本, 3.4.2.16這個版本(在google上大量搜索後找到的)是python opencv中知足上面這些需求的最後一個版本(截止到2019-10我測試過的). 歡迎你們多多測試其餘的新版本, 有更新的版本歡迎在留言中請說明一下.

若是想經過conda安裝, 只推薦conda -c menpo python3 不過只有3.1版本, 而且有功能缺失, 建議pip安裝, 效果是同樣的, 也能夠安裝進conda的虛擬環境中.

固然這種安裝方式也是有缺點的, 那即是沒法使用opencv4中的一些新特性, 但對大多數人來講, opencv3應該能知足絕大多數需求啦.

安裝完測試一下

# 查看opencv版本
python -c "import cv2; print(cv2.__version__)"

若是出現 cv2._version__ 這個屬性不存在的問題, 檢查一些opencv是否徹底卸載乾淨, 必定要所有卸載完, 再從新安裝.

好了, 如今安裝完畢, 來個簡單的SIFT代碼測試一下看看.

import cv2
print("opencv version:", cv2.__version__) # opencv version: 3.4.2

img1 = cv2.imread('1.png')
img2 = cv2.imread('2.png')
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# BFMatcher with default params
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)
# Apply ratio test
good = []
for m,n in matches:
    if m.distance < 0.75*n.distance:
        good.append([m])
# cv2.drawMatchesKnn expects list of lists as matches.
result = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)
cv2.imshow('result', result)
cv2.imwrite("result.jpg", result)
cv2.waitKey(0)

結果以下圖
結果圖
點此下載測試代碼及圖片.

好了, 這篇文章到此結束了.

相關文章
相關標籤/搜索