Используйте OpenCV для разделения изображения RGB на красные и зеленые синие компоненты и работайте с ними - PullRequest
0 голосов
/ 01 мая 2019

Мне нужна помощь с OpenCV и Python.

Как разделить зеленый, красный и синий компоненты изображения RGB с помощью OpenCV и Python?Мне также нужно разделить каждую из этих матриц на подматрицы 8x8, чтобы работать с ними, для этого я думал об использовании numpy.

Код, который у меня есть, следующий, но я застрял с этими я не уверен, что это правильно.

import matplotlib.pyplot as plt
import cv2
import numpy as np

img = cv2.imread("4.jpg")
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]

divb = np.split(b,8)  # divide b in submatrices 8x8?
divg = np.split(g,8)  # divide g in submatrices 8x8?
divr = np.split(r,8)  # divide r in submatrices 8x8?

print('blue:', b)
print('red:', g)
print('green:', r)

cv2.imshow('img',img)

1 Ответ

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

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

img = cv2.imread("4.jpg")
b,g,r = cv2.split(img)

def sub_matrices(color_channel):
    matrices = []
    #How can you change how this loop iterates?
    #Also consider adding stopping conditions and/or additional loops for
    #excess parts of the image.
    for i in range(int(color_channel.shape[0]/8)):
        for j in range(int(color_channel.shape[1]/8)):
            matrices.append(color_channel[i*8:i*8 + 8, j*8:j*8+8])
    return matrices

#returns list of sub matrices
r_submatrices = sub_matrices(r)

Код должен быть достаточно понятным.Как я уже сказал, если размеры изображения не дополняются так, чтобы размеры были размером 8, то части изображения не будут находиться в какой-либо субматрице (особенно для этого кода; измените это так, как вам нужно).Этот код, безусловно, может быть оптимизирован (посмотрите на блокировку кэша) и изменен для подматриц любого размера (что я оставлю для вас в качестве упражнения).Надеюсь, это поможет.

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