__deets__ hat geschrieben: Samstag 29. Dezember 2018, 13:24
"Geht nicht" ist keine sinnvolle Fehlerbeschreibung. Was passiert, wenn du das Skript aufrufst? Gibt es eine Fehlermeldung, wenn ja, wie genau lautet die? Bitte VOLLSTAENDIG reinkopieren, und nicht paraphrasieren.
Und das Skript muss mit dem Bild als Argument aufgerufen werden.
Tschuldige! Mein Fehler, vergessen reinzukopieren.
Also hier wie ich deinen Code ausführe:
Code: Alles auswählen
import sys
from functools import wraps, partial
from collections import namedtuple, deque
import cv2
import numpy as np
img = cv2.imread('V1_01_01.png')
#img = cv2.imread('V1_01_02.png')
Settings = namedtuple("Settings", "Hhigh Hlow Slow Shigh Vlow Vhigh kernel_size")
# through clicking determined
S = 60
S_ADJUST = 20
V = 220
V_ADJUST = 20
DEFAULT_SETTINGS = Settings(Hhigh=130, Hlow=124, Shigh=S+S_ADJUST, Slow=S-S_ADJUST, Vhigh=V+V_ADJUST, Vlow=V-V_ADJUST, kernel_size=20)
def memoize(f):
@wraps(f)
def _d(*a, **k):
key = a, tuple((key, value) for key, value in k.items())
if key not in f._cache:
f._cache[key] = f(*a, **k)
return f._cache[key]
f._cache = {}
return _d
def create_hsv_preview(img):
"""
Takes an HSV-image, and returns
a copy where the SV components
are maxed out, in BGR-colorspace.
This allows to perceive the way sectioning
in H-space works.
"""
hsv_preview = img.copy()
hsv_preview[:, :, 1:] = [255, 255]
return cv2.cvtColor(hsv_preview, cv2.COLOR_HSV2BGR)
def filter_for_color_range(roi, s):
lower = range_array(s.Hlow, s.Slow, s.Vlow)
upper = range_array(s.Hhigh, s.Shigh, s.Vhigh)
return cv2.inRange(roi, lower, upper)
@memoize
def range_array(*a):
return np.array(a, dtype="uint8")
def mouse_callback(queue, event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
queue.append((x, y))
def setup_mouse_callback(q):
cv2.namedWindow("original")
cv2.setMouseCallback("original", partial(mouse_callback, q))
def morph(image, size=5):
kernel = np.ones((size, size), np.uint8)
a = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
return cv2.morphologyEx(a, cv2.MORPH_OPEN, kernel)
def main():
image = cv2.imread(sys.argv[1])
clicks = deque()
setup_mouse_callback(clicks)
cv2.imshow("original", image)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cv2.imshow("hsv", create_hsv_preview(hsv))
filtered = filter_for_color_range(
hsv,
DEFAULT_SETTINGS,
)
cv2.imshow("filtered", filtered)
morphed = morph(filtered, DEFAULT_SETTINGS.kernel_size)
cv2.imshow("morphed", morphed)
_, contours, _ = cv2.findContours(
morphed,
cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE,
)
assert len(contours) == 1
contour = image.copy()
epsilon = 0.001 * cv2.arcLength(contours[0], True)
approx = cv2.approxPolyDP(contours[0], epsilon, True)
print(len(approx))
cv2.drawContours(contour, contours, 0, (255, 255, 0))
cv2.drawContours(contour, [approx], 0, (0, 255, 255))
cv2.imshow("contour", contour)
print("gebogen" if len(approx) > 20 else "gerade")
while True:
key = cv2.waitKey(10)
if key == 27:
break
for x, y in clicks:
print(hsv[y,x,:])
clicks.clear()
if __name__ == '__main__':
main()
Anschließend kommt folgende Fehlermeldung. Wiegesagt entschuldige, bin völliger Anfänger und versuche iwie zurecht zu kommen
Code: Alles auswählen
runfile('C:/Users/kh94/Documents/HTWK_DVM/HTWK_2_Semester/Mustererkennung/Tests/Test_8_SkriptForum/SkriptForum.py', wdir='C:/Users/kh94/Documents/HTWK_DVM/HTWK_2_Semester/Mustererkennung/Tests/Test_8_SkriptForum')
Traceback (most recent call last):
File "<ipython-input-1-dc236a07e07b>", line 1, in <module>
runfile('C:/Users/kh94/Documents/HTWK_DVM/HTWK_2_Semester/Mustererkennung/Tests/Test_8_SkriptForum/SkriptForum.py', wdir='C:/Users/kh94/Documents/HTWK_DVM/HTWK_2_Semester/Mustererkennung/Tests/Test_8_SkriptForum')
File "C:\Users\kh94\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 668, in runfile
execfile(filename, namespace)
File "C:\Users\kh94\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/kh94/Documents/HTWK_DVM/HTWK_2_Semester/Mustererkennung/Tests/Test_8_SkriptForum/SkriptForum.py", line 126, in <module>
main()
File "C:/Users/kh94/Documents/HTWK_DVM/HTWK_2_Semester/Mustererkennung/Tests/Test_8_SkriptForum/SkriptForum.py", line 85, in main
image = cv2.imread(sys.argv[1])
IndexError: list index out of range