Как получить доступ к B, G, R изображения с opencv в Python? - PullRequest
0 голосов
/ 07 мая 2019

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

Я новичок в Python, так что вы можете мне помочь, пожалуйста?

Вот код:

#coding: utf8
import numpy as np
import cv2
from imageio import imread

imgcolor = imread("/home/PATH/bougieHaut3.jpg")
rows,cols,rgb = imgcolor.shape
for i in range(rows):
    for j in range (cols):
        blue = imgcolor[i,j,0]
        B=[]
        B.append(blue)
        green = imgcolor[i,j,1]
        G=[]
        G.append(green)
        red = imgcolor[i,j,2]
        R=[]
        R.append(red)
print(B,G,R)

Большое спасибо за вашу помощь :)!

1 Ответ

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

Вы воссоздаете списки R / G / B для каждого пикселя, поэтому они будут содержать только одну запись.

Попробуйте

import numpy as np
import cv2
from imageio import imread

imgcolor = imread("/home/PATH/bougieHaut3.jpg")
rows, cols, rgb = imgcolor.shape
R = []
G = []
B = []
for i in range(rows):
    for j in range(cols):
        B.append(imgcolor[i, j, 0])
        G.append(imgcolor[i, j, 1])
        R.append(imgcolor[i, j, 2])
print(B, G, R)

РЕДАКТИРОВАТЬ : Более быстрый способ сделать это, используя нарезку Numpy, - это

imgcolor = imread("/home/PATH/bougieHaut3.jpg")
B = imgcolor[:,:,0].flatten()
G = imgcolor[:,:,1].flatten()
R = imgcolor[:,:,2].flatten()

без цикла - тогда вы можете использовать list() для приведения этих массивов Numpy в списки, если вам нужно.

...