Ошибка OpenCV: (-215: утверждение не выполнено)! _Src.empty () в функции 'cvtColor' - PullRequest
1 голос
/ 01 июля 2019

Я использую opencv для управления изображением. Точная ошибка:

OpenCV(4.1.0) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

Я искал по всему интернету, но не могу найти решение этой проблемы.

Одно и то же изображение вызывается несколько раз в этом процессе, и большая часть его работает нормально. Я получаю сообщение об ошибке в этой функции:

def percentage(image, box_points):  #box point is touple here. ((x1,y1),(x2,y2))
    x1=box_points[0][0]
    x2=box_points[1][0]
    y1=box_points[0][1]
    y2=box_points[1][1]  
    rows,cols,c =image.shape
    M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
    image = cv2.warpAffine(image,M,(cols,rows))
    image=image[int(x1):int(x2),int(y1):int(y2)]
    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # ret, bw_img = cv2.threshold(image,160,255,cv2.THRESH_BINARY)
    # bw_img = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 7)
    bw_img = cv2.adaptiveThreshold(image,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2)
    # image=image[int(x1):int(x2),int(y1):int(y2)]
    # bw_img is our binary image here.
    count = cv2.countNonZero(bw_img)
    total = bw_img.shape[1] * bw_img.shape[0]
    ratio = count/total
    ratio =1-ratio
    return ratio, bw_img

Я получаю сообщение об ошибке в строке, где я вызываю cv2.cvtColor. Функция выдает соотношение черных и общих пикселей. Одно и то же изображение вызывается несколько раз во всем этом проекте, поэтому ошибка не должна быть связана с отсутствием изображения.

Также во время тестирования я повернул изображение на 90 градусов против часовой стрелки. И это прекрасно работает, но только для одного конкретного изображения. Помоги мне здесь. enter image description here

Я прилагаю оригинальное изображение здесь. Это работает, когда я поворачиваю его на 90 градусов.

1 Ответ

0 голосов
/ 02 июля 2019

Я попробовал твой код. Работает нормально. Хотя я сделал небольшую модификацию в строке, где вы обрезаете изображение. То, что вы делаете, это roi = im[x1:x2, y1:y2], но оно должно быть roi = im[y1:y2, x1:x2]. Проверьте это сообщение stackoverflow для получения дополнительной информации о том, как обрезать изображение, используя numpy slicing. Это может быть причиной вышеуказанной ошибки, которую вы получаете. Вы должны проверить, чтобы убедиться, что.

Это небольшое изменение может быть очень важным. Проверьте сравнение ниже:

Вызов функции для обоих случаев: percentage(img, ((10, 10), (300, 600)))

Дело 1: image=image[int(x1):int(x2),int(y1):int(y2)]

enter image description here

Дело 2: image=image[int(y1):int(y2), int(x1):int(x2)]

enter image description here

Я не знаю, намеренно вы это делаете или нет, но, пожалуйста, проверьте это один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...