OpenCV ist eine Open-Source-Softwarebibliothek für Computer Vision und machine learning. Mithilfe dieser Funktion können verschiedene Bildverarbeitungsvorgänge wie das Bearbeiten von Bildern und das Anwenden von Tonnen von Filtern durchgeführt werden. Es wird häufig bei Objekterkennung, Gesichtserkennung und anderen Bildverarbeitungsaufgaben verwendet.

Mal sehen, wie man eine rechteckige Form auf ein Bild zeichnet und die Objekte mit OpenCV extrahiert.

import cv2 
import numpy as np 
  
drawing = False    
mode = True        
ix, iy = -1, -1
  
def draw_circle(event, x, y, flags, param): 
    global ix, iy, drawing, mode 
      
    if event == cv2.EVENT_LBUTTONDOWN: 
        drawing = True
        ix, iy = x, y 
      
    elif event == cv2.EVENT_MOUSEMOVE: 
        if drawing == True: 
            if mode == True: 
                cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 3) 
                a = x 
                b = y 
                if a != x | b != y: 
                    cv2.rectangle(img, (ix, iy), (x, y), (0, 0, 0), -1) 
            else: 
                cv2.circle(img, (x, y), 5, (0, 0, 255), -1) 
      
    elif event == cv2.EVENT_LBUTTONUP: 
        drawing = False
        if mode == True: 
            cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 2) 
      
        else: 
            cv2.circle(img, (x, y), 5, (0, 0, 255), -1) 
      
img = np.zeros((512, 512, 3), np.uint8) 
cv2.namedWindow('image') 
cv2.setMouseCallback('image', draw_circle) 
  
while(1): 
    cv2.imshow('image', img) 
    k = cv2.waitKey(1) & 0xFF
    if k == ord('m'): 
        mode = not mode 
    elif k == 27: 
        break
  
cv2.destroyAllWindows()  

Ausgabe:

Der obige Code funktioniert nur mit einem schwarzen Hintergrundbild. Zu jedem Bild können jedoch Rechtecke gezeichnet werden. Wir können ein Programm schreiben, mit dem wir den gewünschten Teil in einem Bild auswählen und auch diesen ausgewählten Teil extrahieren können. Die Aufgabe umfasst Folgendes:

  • Zeichnen Sie Form auf jedes Bild
  • Wählen Sie den Extraktanteil erneut aus, falls eine schlechte Auswahl vorliegt
  • Extrahieren Sie ein bestimmtes Objekt aus dem Bild
import cv2 
import argparse 
  
ref_point = [] 
crop = False
  
def shape_selection(event, x, y, flags, param): 
    
    global ref_point, crop 
  
    
    
    if event == cv2.EVENT_LBUTTONDOWN: 
        ref_point = [(x, y)] 
  
    
    elif event == cv2.EVENT_LBUTTONUP: 
        
        
        ref_point.append((x, y)) 
  
        
        cv2.rectangle(image, ref_point[0], ref_point[1], (0, 255, 0), 2) 
        cv2.imshow("image", image) 
  
  
ap = argparse.ArgumentParser() 
ap.add_argument("-i", "--image", required = True, help ="Path to the image") 
args = vars(ap.parse_args()) 
  
image = cv2.imread(args["image"]) 
clone = image.copy() 
cv2.namedWindow("image") 
cv2.setMouseCallback("image", shape_selection) 
  
  
while True: 
    
    cv2.imshow("image", image) 
    key = cv2.waitKey(1) & 0xFF
  
    
    if key == ord("r"): 
        image = clone.copy() 
  
    
    elif key == ord("c"): 
        break
  
if len(ref_point) == 2: 
    crop_img = clone[ref_point[0][1]:ref_point[1][1], ref_point[0][0]: 
                                                           ref_point[1][0]] 
    cv2.imshow("crop_img", crop_img) 
    cv2.waitKey(0) 
  
cv2.destroyAllWindows()  

Ausführen : Speichern Sie die Datei als capture_events.py und wählen Sie zum Testen ein Demobild aus, das sich im selben Verzeichnis befindet. Führen Sie nun den folgenden Befehl aus:



python capture_events.py --image demo.jpg

Ausgabe : Wählen Sie zuerst den gewünschten Teil aus dem Bild aus. Außerdem können wir fehlerhafte Auswahlen entfernen, indem wir wie programmiert 'r' drücken, um eine neue richtige Auswahl zu treffen.


Abb: Ausgewählter Teil

Nachdem Sie eine richtige Auswahl wie oben ausgewählt haben, drücken Sie einfach 'c', um wie programmiert zu extrahieren.
Abb: Schnittteil