Улучшить эти opencv вложенный цикл - PullRequest
0 голосов
/ 24 февраля 2020

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

    import cv2  
    import numpy as np

    img1 = cv2.imread("J:/1.jpg", cv2.IMREAD_COLOR)
    img2 = cv2.imread("J:/2.jpg", cv2.IMREAD_COLOR)
    img3 = cv2.imread("J:/3.jpg", cv2.IMREAD_COLOR)
    img4 = cv2.imread("J:/4.jpg", cv2.IMREAD_COLOR)
    img5 = cv2.imread("J:/5.jpg", cv2.IMREAD_COLOR)
    img6 = cv2.imread("J:/6.jpg", cv2.IMREAD_COLOR)
    img7 = cv2.imread("J:/7.jpg", cv2.IMREAD_COLOR)
    img8 = cv2.imread("J:/8.jpg", cv2.IMREAD_COLOR)
    img9 = cv2.imread("J:/9.jpg", cv2.IMREAD_COLOR)
    img10 = cv2.imread("J:/10.jpg", cv2.IMREAD_COLOR)
    img11 = cv2.imread("J:/11.jpg", cv2.IMREAD_COLOR)
    imgList = [img1, img2, img3, img4, img5, img6, img7, img8, img9, img10, img11]  

    height = img1.shape[0]
    width = img1.shape[1]
    imgall = np.array(imgList)

    png = np.zeros((height, width, 4), dtype=np.uint8)

    start1 = cv2.getTickCount()
    for yh in range(height):
        for xw in range(width):
            pstd = np.std(imgall[:, yh, xw, :], axis=0)
            pstdmean = np.mean(pstd)
            if pstdmean < 50:
                if pstdmean < 10:
                    png[yh, xw] = list(np.mean(imgall[:, yh, xw, :], axis=0)) + [255]
                else:
                    pmedian = np.median(imgall[:, yh, xw, :], axis=0)
                    png[yh, xw] = list(pmedian) + [255]
    end1 = cv2.getTickCount()
    during1 = (end1 - start1) / cv2.getTickFrequency()
    print(during1)

Я пытаюсь найти, как получить "номер сбора "/" номер режима ", например: гистограмма, евклидово расстояние, bgr2grey, нормальное распределение ...

Я хотел бы заменить этот плохой медианный метод.

1 Ответ

0 голосов
/ 02 марта 2020

никто не отвечает мне. Но к счастью, я нашел ответ сам. Он должен быть настроен на numpy вычисление и не должен использоваться для вложенного l oop. Я разделил bgr на b [] g [] r [], чтобы они могли вычислять один за другим, и их было легче понять. затем я складываю (ось = -1) эти 11 imgs для каждого канала, это легко понять и вычислить, в итоге я складываю bgr в одно img и использую mask = cv2.inRange (xxx, a, b), чтобы помочь мне получить что я хочу альфа-канал .png тоже использовать маску. png = np.stack ((b, g, r, маска), ось = -1)

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