Wie finde ich Kontur oder Kanten in meinem Bild mit OpenCV in Python3?Python

Python-Programme
Guest
 Wie finde ich Kontur oder Kanten in meinem Bild mit OpenCV in Python3?

Post by Guest »

Ich möchte die drei Rechtecke (weiß, grau, grau) in diesem Bild wie unten erkennen. src = "https://i.static.net/1kx288r3.png"/>
Ich habe versucht, die Find_contour -Funktion in openCV für Python zu verwenden, aber die hellgrauen Streifen gestört Suchobjekte. Ich habe gerade den Schwellenwert der Canny -Funktion angepasst und überbezogene Bereiche gelöscht.import cv2
import matplotlib.pyplot as plt

src = cv2.imread('./src.png', cv2.IMREAD_GRAYSCALE)

canny_base = cv2.Canny(src, 10, 300)
canny_bot_base = cv2.Canny(src, 10, 250)
canny_top_bot = cv2.Canny(src, 10, 210)
canny_stripe = cv2.Canny(src, 10, 100)
canny_middle_top = cv2.Canny(src, 10, 50)

canny_bot = canny_bot_base - canny_base
canny_top = canny_top_bot - canny_bot_base
canny_middle = canny_middle_top - canny_stripe

contours_bot, hierachy = cv2.findContours(canny_bot.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
sorted_contours_bot = sorted(contours_bot, key=cv2.contourArea, reverse=True)

pts_x_bot = []
pts_y_bot = []

for i in range(len(sorted_contours_bot)):
contour_bot = sorted_contours_bot

extLeft = tuple(contour_bot[contour_bot[:, :, 0].argmin()][0])
extRight = tuple(contour_bot[contour_bot[:, :, 0].argmax()][0])
extTop = tuple(contour_bot[contour_bot[:, :, 1].argmin()][0])
extBot = tuple(contour_bot[contour_bot[:, :, 1].argmax()][0])

pts_x_bot.append(extLeft[0]); pts_x_bot.append(extRight[0]); pts_x_bot.append(extBot[0]); pts_x_bot.append(extTop[0])
pts_y_bot.append(extLeft[1]); pts_y_bot.append(extRight[1]); pts_y_bot.append(extBot[1]); pts_y_bot.append(extTop[1])

pts_x_top = []
pts_y_top = []

contours_top, hierachy = cv2.findContours(canny_top.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
sorted_contours_top = sorted(contours_top, key=cv2.contourArea, reverse=True)

for i in range(len(sorted_contours_top)):
contour_top = sorted_contours_top

extLeft = tuple(contour_top[contour_top[:, :, 0].argmin()][0])
extRight = tuple(contour_top[contour_top[:, :, 0].argmax()][0])
extTop = tuple(contour_top[contour_top[:, :, 1].argmin()][0])
extBot = tuple(contour_top[contour_top[:, :, 1].argmax()][0])

pts_x_top.append(extLeft[0]); pts_x_top.append(extRight[0]); pts_x_top.append(extBot[0]); pts_x_top.append(extTop[0])
pts_y_top.append(extLeft[1]); pts_y_top.append(extRight[1]); pts_y_top.append(extBot[1]); pts_y_top.append(extTop[1])

pts_x_middle = []
pts_y_middle = []

contours_middle, hierachy = cv2.findContours(canny_middle.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
sorted_contours_middle = sorted(contours_middle, key=cv2.contourArea, reverse=True)

for i in range(len(sorted_contours_middle)):
contour_middle = sorted_contours_middle

extLeft = tuple(contour_middle[contour_middle[:, :, 0].argmin()][0])
extRight = tuple(contour_middle[contour_middle[:, :, 0].argmax()][0])
extTop = tuple(contour_middle[contour_middle[:, :, 1].argmin()][0])
extBot = tuple(contour_middle[contour_middle[:, :, 1].argmax()][0])

pts_x_middle.append(extLeft[0]); pts_x_middle.append(extRight[0]); pts_x_middle.append(extBot[0]); pts_x_middle.append(extTop[0])
pts_y_middle.append(extLeft[1]); pts_y_middle.append(extRight[1]); pts_y_middle.append(extBot[1]); pts_y_middle.append(extTop[1])

plt.imshow(src, plt.cm.gray)
plt.colorbar()

plt.scatter(pts_x_bot, pts_y_bot, c = "r", s = 1)
plt.scatter(pts_x_top, pts_y_top, c = "blue", s = 1)
plt.scatter(pts_x_middle, pts_y_middle, c = "green", s = 1)
< /code>
Ich möchte diesen Code mit allen Cluster-Algorithmen wie DBSCAN oder K-Means automatisieren. Ich konnte jedoch nicht wissen, wie diese Clustering -Algorithmen in Bildern angewendet werden. Die Beispiele für Clustering, die nur Cluster in Datenpunkten von zwei verschiedenen Funktionen finden.
Kann jemand sagen, wie kann ich dieses Problem lösen?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post