1. 程式人生 > >用Python和OpenCV建立一個圖片搜尋引擎時遇到的坑

用Python和OpenCV建立一個圖片搜尋引擎時遇到的坑

在學習http://python.jobbole.com/80860/ 中的圖片搜尋引擎時,遇到一些問題,花費了很長時間解決:


問題一:TypeError: ellipse() takes at most 5 arguments (8 given)

解決:有兩個引數不同的ellipse()函式,自動呼叫了五個引數,需要呼叫的方法有八個引數的方法。

由於(cX,cY)不是整數型別,需要強制型別轉化。

由於教程基於的是python2,在遷移到Python 3.6時,一些原本在Python 2.7中工作得很好的程式碼出現問題。

原始碼:cv2.ellipse(ellipMask,(cX, cY),(axesX,axesY), 0, 0, 360, 255, -1)

更改後:cv2.ellipse(ellipMask,(int(cX), int(cY)),(int(axesX),int(axesY)), 0, 0, 360, 255, -1)

參考:https://stackoverflow.com/questions/25408391/python-opencv-ellipse-takes-at-most-5-arguments-8-given


問題二:

hist = cv2.normalize(hist).flatten()

TypeError: Required argument 'dst' (pos 2) not found 解決

缺少一個引數。

解決:

原始碼:hist = cv2.normalize(hist).flatten()
更改後:hist = cv2.normalize(hist,hist).flatten()
需要兩個引數

問題三:路徑問題

result = cv2.imread(args["resultpath"] + "\\" + resultID)imageID = imagePath[imagePath.rfind("\\") +1:]之前遇到過。。由於顯示cv2.imshow("Result", result) 這句出現問題,那麼,我想可能是result不對,於是在search中輸出了resultID。發現之前的一個操作誤將index.csv中的鍵也就是圖片名弄錯了,改回去之後成功了。問題四:速度有點慢
cd = ColorDescriptor((8, 12, 3)) 引數可適當更改。