Возможно ли, что один и тот же код возвращает другой результат с openCV? - PullRequest
0 голосов
/ 08 мая 2018

Я запускаю python программу с openCV на Raspberry-Pi.

Я получил супер странно OpenCV Error. Похоже, это не должно было произойти, но это произошло.

Короче говоря, mask s обрезается на cv2.inRange() отличается от того же image.

Простая структура моего кода:

  1. обработать images в mask и вычислить тип точности.
  2. Если mask не собрано в (1.), что означает, что mask из image все черные (пусто) np.array, оно пропускает итерацию на exception: Value Error команда. (потому что min(empty np.array) в коде araise Value Error.)
  3. Итерация (1. ~ 2.) С интервалом времени.

Проблема:

У меня то же самое OpenCV Error больше двух недель. Это связано с тем, что некоторым кодам parameters присвоено неправильное значение. Это paramters в основном рассчитывается из mask, которое обрезается из image. Таким образом, я сохранил все image с и mask с в процедуре итерации. И обнаружил, что были крошечные mask, которые не должны быть сделаны в 9th iteration

Проблема в том, что когда я устал подрезать mask с такими же 9 th image вручную на моем labtop, это не дает mask, что означает просто пустое (черное) mask сделано. но было очень маленькое mask (белая область), сделанное во время итеративного запуска в Raspberry-Pi.

Я проверил, есть ли разница между файлами в labtop и R-Pi, но оба были одинаковыми. Вот images: Сначала вводится изображение для создания Real экземпляра. Второй создается вручную mask. Thired создается автоматически mask в R-Pi. imageimage in question">imagemask">imagemask">

Единственная разница между ПК и R-Pi заключается в том, что: когда я запускаю код вручную на ПК, я использовал сохраненный image.jpg из SDcard of R-Pi. и когда код запускается в R-Pi итеративно, image напрямую захватывается из R-pi camera module V2

Я знаю, что это очень странно, и многие думают, что в кодах есть опечатка или что-то не так. Но я страдал за эту проблему в последние две недели. Мне нужна какая-нибудь ветка об этой проблеме.

Есть ли возможные случаи, когда из одного и того же кода в openCV или R-pi?

собирается другой результат?

Вот некоторая часть кода. Real экземпляр создается итеративно в цикле. Строка OpenCV Error помечена #. Если кто-то запросит, я буду загружать больше. Загрузка полного кода слишком длинна.

class Real:  
    __ob_low=np.array([25,100,50]) #27,65,100]) /25,100,50
    __ob_high=np.array([33,255,255]) #[45,255,255]) /33,255,255

    def __opening(self, mask):
        kernel = np.ones((7, 1), np.uint8)
        op = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
        return op

    def __init__(self, img_got,imgname):

        img = img_got
        hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

        mask_temp = cv2.inRange(hsv, self.__ob_low, self.__ob_high)
        mask = self.__opening(mask_temp)

        maskdir = "/home/pi/capstone/mask/" #
        img_name = imgname #
        cv2.imwrite(os.path.join(maskdir,img_name),mask) #

        if not (np.any(mask)):
            print("mask is empty")

        array1 = np.transpose(np.nonzero(mask))
        array2 = np.nonzero(mask)

        ymin=min(array2[1])
        ymax=max(array2[1])
        xmin=min(array2[0])
        xmax=max(array2[0])

        self.x = xmax-xmin
        self.y = ymax-ymin
        self.ratio = self.x/self.y

        self.img = img
        self.mask = mask[(xmin):(xmax),(ymin):(ymax)]

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

У меня была проблема с моим кодом в другой системе, и оказалось, что версии 3.4.1 и 3.3.1 дают другой результат из моего алгоритма обрезки!

0 голосов
/ 11 мая 2018

Это произошло потому, что image, полученный непосредственно с камеры, отличается от image.jpg, сохраненного на диске. Первый более чувствителен с cv2.Inrange(). Похоже части image теряются в процессе сохранения. Если бы я сохранил файл в другом формате, таком как .png или другой, результат будет другим.

В любом случае, чтобы синхронизировать R-Pi и labtop, я изменил код, чтобы использовать сохраненный файл .jpg как в R-Pi, так и в labtop.

...