Я пытаюсь найти эффективный способ преобразования из кортежа (где каждые 4 записи соответствуют R, G, B, alpha пикселя) в массив NumPy (для использования в OpenCV).NumPy - Эффективное преобразование из кортежа в массив?
В частности, я использую pywin32 для получения растрового изображения в клиентской области окна. Это возвращается в виде кортежа, где первые четыре элемента принадлежат RGB-альфа-каналам первого пикселя, затем следующие четыре второго пикселя и так далее. Сам кортеж содержит только целые данные (т. Е. Он не содержит никакой размерности, хотя у меня есть эта информация). Из этого кортежа я хочу создать массив NumPy 3D (ширина x высота x канал). В настоящее время я просто создаю массив нулей, а затем просматриваю каждую запись в кортеже и помещаю ее в массив NumPy. Я делаю это, используя код ниже. И я надеюсь, что может быть значительно более эффективный способ сделать это, о котором я просто не думаю. Какие-либо предложения? Спасибо много!
Код:
bitmapBits = dataBitmap.GetBitmapBits(False) #Gets the tuple.
clientImage = numpy.zeros((height, width, 4), numpy.uint8)
iter_channel = 0
iter_x = 0
iter_y = 0
for bit in bitmapBits:
clientImage[iter_y, iter_x, iter_channel] = bit
iter_channel += 1
if iter_channel == 4:
iter_channel = 0
iter_x += 1
if iter_x == width:
iter_x = 0
iter_y += 1
if iter_y == height:
iter_y = 0
Это действительно немного быстрее (для моего текущего использования это примерно на 10% быстрее, чем решение, предложенное Биллом). – golmschenk