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?>
Wie finde ich Kontur oder Kanten in meinem Bild mit OpenCV in Python3? ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post