2016-11-08 6 views
1

Wie man cv2.boundingRect auf eine np.array von Punkten anwendet?
Der folgende Code erzeugt einen Fehler.Wenden Sie cv2.boundingRect auf np.array an

points = np.array([[1, 2], [3, 4]], dtype=np.float32) 
import cv2 
cv2.boundingRect(points) 

Fehler:

OpenCV Error: Unsupported format or combination of formats (The image/matrix format is not supported by the function) in cvBoundingRect, file /build/buildd/opencv-2.4.8+dfsg1/modules/imgproc/src/shapedescr.cpp, line 97 

File "<ipython-input-23-42e84e11f1a7>", line 1, in <module> 
    cv2.boundingRect(points) 
error: /build/buildd/opencv-2.4.8+dfsg1/modules/imgproc/src/shapedescr.cpp:970: error: (-210) The image/matrix format is not supported by the function in function cvBoundingRect 
+0

Ich schlage vor, wollte 'cv2.boundingRect (cv2.cv.fromarray (Punkte))', aber das scheint nicht zu arbeite entweder. return 'TypeError: points ist kein numpy array, auch kein scalar' – jmunsch

+0

Ich habe deinen Code ausprobiert und es hat mir diese Boundingbox ohne Fehler (1, 2, 3, 3) gegeben, die wahr zu sein scheint. Meine CV-Version ist jedoch "3.1.0-dev". – cagatayodabasi

Antwort

1

Die Python-Anbindung der 2.x-Versionen von OpenCV verwenden etwas andere Darstellung einiger Daten als die, die in 3.x.

Aus vorhandenen Codebeispielen (z. B. this answer auf SO) können wir sehen, dass wir cv2.boundingRect mit einem en-Element der Liste der Konturen aufrufen können, die von cv2.findContours zurückgegeben werden. Werfen wir einen Blick haben, wie das aussieht:

>>> a = cv2.copyMakeBorder(np.ones((3,3), np.uint8),1,1,1,1,0) 
>>> b,c = cv2.findContours(a, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 
>>> b[0] 
array([[[1, 1]], 

     [[1, 3]], 

     [[3, 3]], 

     [[3, 1]]]) 

Wir, dass jeder Punkt in der Kontur als [[x, y]] dargestellt wird, sehen können, und wir haben eine Liste von denen.

Daher

import numpy as np 
import cv2 

point1 = [[1,2]] 
point2 = [[3,4]] 

points = np.array([point1, point2], np.float32) 

print cv2.boundingRect(points) 

Und wir bekommen die Ausgabe

(1, 2, 3, 3) 
Verwandte Themen