, поэтому я работал над небольшим проектом, чтобы улучшить свои навыки с OpenCV в Python. Но почему-то я борюсь со своими переменными в функции.
Это мой основной код с l oop. В основном я хочу, чтобы он запускал функцию 3 раза, которая указана в другом файле и обрезает заданное изображение.
croppedImage = [0] * len(urls)
while number < 3:
message, croppedImage[number] = ImageProcessing.cropImage(path)
print(bot+"Successfully cropped "+message)
number += 1
Моя функция выглядит следующим образом. Мне как-то пришлось назначить координаты для обрезки данного изображения в качестве глобальных переменных, поскольку я получил другую ошибку без этого ( "локальная переменная, на которую ссылаются перед присваиванием" ). Но с помощью этого кода я, по крайней мере, могу успешно обрезать первое изображение на основе его цветов.
import cv2
import numpy as np
def cropImage(path):
global x_coordinate
global y_coordinate
global image_width
global image_height
img = cv2.imread(path)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_range = np.array([70, 14, 35])
upper_range = np.array([125, 55, 36])
mask = cv2.inRange(hsv, lower_range, upper_range)
contours = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]
result = img.copy()
largest_area = 0
for contour in contours:
(x, y, w, h) = cv2.boundingRect(contour)
if w > 650 and w < 750:
area = cv2.contourArea(contour)
if area > largest_area:
largest_area = area
(x_coordinate, y_coordinate, image_width, image_height) = (x, y, w, h)
croppedImage = result[y_coordinate:y_coordinate+image_height, x_coordinate:x_coordinate+image_width]
message = "[Width: "+str(image_width)+"] [Height: "+str(image_height)+"]"
return message, croppedImage
В основном код должен обрезать заданные изображения, но каким-то образом он работает только на первом изображении. После того, как переменные X, Y, Width и Height были назначены в первом запуске, код не обновляет эти переменные во втором запуске, пока l oop. Таким образом, каждое изображение обрезается до одного и того же размера, но я скорее хочу, чтобы изображение было обрезано до определенного размера (переменная image_width , а также переменная image_height остается неизменной ).
Я пытался решить эту проблему с незапамятных времен, но у меня не получается. Благодарим вас за помощь, заранее.
РЕДАКТИРОВАТЬ: Иногда это даже не работает, и я получаю только сообщение об ошибке «NameError: name 'y_coordinate' is notfined».