Frage: Ich brauche jemanden
zu beantworten Was benötige ich für die unten Skript zu ändern, auf dem Originalbild anstelle des skalierte Bild zu arbeiten?mein Skript Wollen Sie auf dem Originalbild arbeiten anstelle der Größe geänderte Bild
Info zu helfen, mein Problem
Die Bilder stammen aus einem Scanner zu lösen und enthalten 2 oder 3 receipes Schriftgut auf 3 „x5“ Karteikarten.
Das Skript identifiziert jede Rezeptur korrekt und speichert sie in einzelnen Dateien. Leider ist der Text in den neuen Bildern zu klein für mein OCR-Skript, um die handgeschriebenen Rezepte genau zu lesen.
Die Entfernung der img = cv2.resize()
Linie (Linie 54) Ergebnisse in „Indexerror: Listenindex außerhalb des zulässigen Bereichs“ von def transform()
auf der Leitung geworfen 33.
# Original Script: https://www.quora.com/How-can-I-detect-an-object-from-static-image-and-crop-it-from-the-image-using-openCV
import cv2
import numpy as np
import os
def transform(pos):
# This function is used to find the corners of the object and the dimensions of the object
pts=[]
n=len(pos)
for i in range(n):
pts.append(list(pos[i][0]))
sums={}
diffs={}
tl=tr=bl=br=0
for i in pts:
x=i[0]
y=i[1]
sum=x+y
diff=y-x
sums[sum]=i
diffs[diff]=i
sums=sorted(sums.items())
diffs=sorted(diffs.items())
n=len(sums)
# The IndexError occurs on this line
rect=[sums[0][1],diffs[0][1],diffs[n-1][1],sums[n-1][1]]
# top-left top-right bottom-left bottom-right
h1 = np.sqrt((rect[0][0]-rect[2][0])**2 + (rect[0][1]-rect[2][1])**2) #height of left side
h2 = np.sqrt((rect[1][0]-rect[3][0])**2 + (rect[1][1]-rect[3][1])**2) #height of right side
h = max(h1, h2)
w1 = np.sqrt((rect[0][0]-rect[1][0])**2 + (rect[0][1]-rect[1][1])**2) #width of upper side
w2 = np.sqrt((rect[2][0]-rect[3][0])**2 + (rect[2][1]-rect[3][1])**2) #width of lower side
w = max(w1, w2)
return int(w), int(h), rect
img = cv2.imread('source_image.png')
#
# Resizing of image is done here
#
# Removal of these lines results in "IndexError: list index out of range" being displayed
r = 500.0/img.shape[1]
dim = (500, int(img.shape[0] * r))
img = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (11,11), 0)
edge = cv2.Canny(gray, 100, 200)
_, contours, _ = cv2.findContours(edge.copy(), 1, 1)
# Give each output image a unique name
loopcnt = 0
for pos in contours:
peri = cv2.arcLength(pos, True)
approx = cv2.approxPolyDP(pos, 0.02 * peri, True)
w, h, arr = transform(approx)
if w > 0 and h > 0:
pts2 = np.float32([[0, 0], [w, 0], [0, h], [w, h]])
pts1 = np.float32(arr)
M = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(img, M, (w, h))
image = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
cv2.imwrite("output_image_"+str(loopcnt)+".png", image)
loopcnt+=1
Ich bin froh, dass Sie eine Lösung für Ihr Problem gefunden haben! Beachten Sie, dass Fragen wie diese bei der späteren Verwendung besser funktionieren, wenn Sie ein [minimales Arbeitsbeispiel] (https://stackoverflow.com/help/mcve) veröffentlichen, das Ihr Problem reproduziert. Wenn Sie nur dieses Beispiel erstellen, führt das oft dazu, dass Sie das Problem selbst finden. Und es macht viel weniger Arbeit für die Community, um auf das Problem hinzuweisen (ich würde niemals versuchen, den großen Block Code zu lesen, den Sie gepostet haben). Und es zeigt der Community, dass Sie für eine Weile selbst an dem Problem gearbeitet haben, bevor Sie aufgeben, was uns eher hilft zu helfen. –