Ich habe Probleme mit import cv
meinem Python-Code.
Mein Problem ist, dass ich ein Rechteck um interessierende Bereiche in einem Bild zeichnen muss. Wie kann das in Python gemacht werden? Ich mache Objekterkennung und möchte ein Rechteck um die Objekte zeichnen, von denen ich glaube, dass ich sie im Bild gefunden habe.
python
opencv
computer-vision
draw
user961627
quelle
quelle
DLL load failed: %1 is not a valid Win32 application
. Ich verwende Win7 64-Bit. Und Spyder- und Scikit-Bibliotheken und alles läuft 64-Bit.Sie können verwenden
cv2.rectangle()
:cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift) Draws a simple, thick, or filled up-right rectangle. The function rectangle draws a rectangle outline or a filled rectangle whose two opposite corners are pt1 and pt2. Parameters img Image. pt1 Vertex of the rectangle. pt2 Vertex of the rectangle opposite to pt1 . color Rectangle color or brightness (grayscale image). thickness Thickness of lines that make up the rectangle. Negative values, like CV_FILLED , mean that the function has to draw a filled rectangle. lineType Type of the line. See the line description. shift Number of fractional bits in the point coordinates.
Ich habe ein PIL- Bildobjekt und möchte ein Rechteck auf dieses Bild zeichnen, aber die ImageDraw.rectangle () -Methode von PIL kann keine Linienbreite angeben. Ich muss das Bildobjekt in das Bildformat von opencv2 konvertieren, ein Rechteck zeichnen und zurück in das Bildobjekt konvertieren . So mache ich das:
# im is a PIL Image object im_arr = np.asarray(im) # convert rgb array to opencv's bgr format im_arr_bgr = cv2.cvtColor(im_arr, cv2.COLOR_RGB2BGR) # pts1 and pts2 are the upper left and bottom right coordinates of the rectangle cv2.rectangle(im_arr_bgr, pts1, pts2, color=(0, 255, 0), thickness=3) im_arr = cv2.cvtColor(im_arr_bgr, cv2.COLOR_BGR2RGB) # convert back to Image object im = Image.fromarray(im_arr)
quelle
Wie die anderen Antworten sagten, ist die Funktion, die Sie benötigen
cv2.rectangle()
, aber denken Sie daran, dass die Koordinaten für die Begrenzungsrahmenscheitelpunkte Ganzzahlen sein müssen, wenn sie sich in einem Tupel befinden, und sie müssen in der Reihenfolge von(left, top)
und liegen(right, bottom)
. Oder gleichwertig(xmin, ymin)
und(xmax, ymax)
.quelle