最近要做和計算機視覺相關的專案,就開始學習OpenCV了,買了《學習OpenCV3》這本書,發現是用C++撰寫的例程,就開始配置C++的環境,
配了一整天visual studio 2019,失敗,感覺原因一是自己確實不熟悉C++的dll和lib那一塊,對x64和x86也不熟悉,所以配置都得照著網上的說法弄,神奇的是,網上一個網頁一個說法,雖然都達成了最終目的,但總感覺不夠正規和簡潔,一怒之下還是在Anaconda上裝了OpenCV-Python,之前有做過C++和Python上OpenCV的區別調查,發現其實介面呼叫都差不多,執行效率也相差無幾(特別提到了numba)所以干脆就用Python了,
但在跟著書上C++的例程寫Python時還是遇到了一些問題,特此記錄,
第一個與遇到的比較重要的區別實在示例2-5里,原文C++代碼為
cv::Mat out cv::GaussianBlur( image, out, cv::Size(5, 5), 3, 3);
遇到第一個問題是 out 這個變數,一開始我以為 out 放到Python里應該變成
out = np.mat()
# 插曲:說到numpy,也是我之前發現,例程里的img.empty()沒法用,因為Python里沒有empty()這個函式,然后想到之前說到的numba可以優化Python的OpenCV所以想到Py-CV里的圖片檔案可能使用numpy的matrix保存的,View Code
之后想起來 np.mat() 應該傳入引數,但怎么可能預先知道讀取的圖片大小,于是改用了
out = None
然后把高斯模糊部分的代碼改為
cv.GaussianBlur(image, out, (5, 5), 3, 3)
然后發現報錯,要求輸入tunple型別,根據我寫Python的經驗和讀cv.GaussianBlur的引數,反應過來應該寫成
out = cv.GaussianBlur(image, (5, 5), 3, 3)
之后就跑通了,測驗檔案用的就是著名的512*512的Lenna
貼上example2_5的python對應代碼
import cv2 as cv import numpy as np def example2_5(image): # Create windows to show input and output cv.namedWindow("Example2_5-in", cv.WINDOW_AUTOSIZE) cv.namedWindow("Example2_5-out", cv.WINDOW_AUTOSIZE) # Create a window to show input image cv.imshow("Example2_5-in", image) out = cv.GaussianBlur(image, (5, 5), 3, 3) out = cv.GaussianBlur( out, (5, 5), 3, 3) # Show the smoothed image cv.imshow("Example2_5-out", out) cv.waitKey(0) if __name__ == '__main__': img = cv.imread("lenna.png") example2_5(img)View Code
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/169434.html
標籤:其他
