Bagaimana cara menghapus objek lain dari gambar dengan menggunakan opencv?

Aug 20 2020

Saya mencoba mendeteksi garis kuning pada gambar berikut tetapi logo (warna kuning) akan ditandai juga. Pertanyaan saya adalah bagaimana cara menutupi logo?

Saya menggunakan kode standar Transformasi Hough. Kode saya adalah sebagai berikut:

import cv2
import numpy as np
img = cv2.imread('Road3.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


low_yellow=np.array([18, 94, 140])
up_yellow=np.array([48, 255, 255])
 mask=cv2.inRange(hsv, low_yellow, up_yellow)
 edges = cv2.Canny(mask,75,150)

 lines = cv2.HoughLinesP(edges,1,np.pi/180,50,maxLineGap=250)
  for line in lines:
 x1,y1,x2,y2 = line[0]
 cv2.line(img,(x1,y1),(x2,y2),(0,255,0),5)

 cv2.imshow('image', img)
 cv2.imshow("edges", edges)
 k = cv2.waitKey(0)
 cv2.destroyAllWindows()

Jawaban

Ahx Aug 20 2020 at 18:49

Anda dapat menggunakan pendekatan pencocokan template multi-skala.

Anda ingin menghapus gambar berikut:

    1. Deteksi gambar
    import cv2
    import imutils
    import numpy as np
    
    template = cv2.imread("template/template.jpg")
    template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
    template = cv2.Canny(template, 50, 200)
    (h, w) = template.shape[:2]
    
    image = cv2.imread('nnEGw.jpg')
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    found = None
    
    for scale in np.linspace(0.2, 1.0, 20)[::-1]:
         resized = imutils.resize(gray, width=int(gray.shape[1] * scale))
         r = gray.shape[1] / float(resized.shape[1])
    
         if resized.shape[0] < h or resized.shape[1] < w:
             break
    
         edged = cv2.Canny(resized, 50, 200)
         result = cv2.matchTemplate(edged, template, cv2.TM_CCOEFF)
         (_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)
    
         if found is None or maxVal > found[0]:
             found = (maxVal, maxLoc, r)
    
    (_, maxLoc, r) = found
    (startX, startY) = (int(maxLoc[0] * r), int(maxLoc[1] * r))
    (endX, endY) = (int((maxLoc[0] + w) * r), int((maxLoc[1] + h) * r))
    
    cv2.rectangle(image, (startX, startY), (endX, endY), (0, 0, 255), 2)
    cv2.imwrite("result/edges2.png", image)
    

      1. Isi persegi panjang
    cv2.rectangle(image, (startX, startY), (endX, endY), (255, 255, 255), -1)
    

      1. Terapkan Hough Transform
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    
    low_yellow = np.array([18, 94, 140])
    up_yellow = np.array([48, 255, 255])
    mask = cv2.inRange(hsv, low_yellow, up_yellow)
    edges = cv2.Canny(mask, 75, 150)
    
    lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 50, maxLineGap=250)
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 5)
    
        # cv2.imshow('image', img)
        cv2.imwrite("result/edges3.png", edges)