Cifrar
Como me hacen creer, OpenCV lee imágenes en BGR espacio de color ordenar y generalmente tenemos que volver a convertirlo a RGB de esta manera:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
Pero cuando intento simplemente leer una imagen y mostrarla, la coloración parece estar bien (sin necesidad de convertir BGR a RGB):
img_bgr = cv2.imread(image_path)
cv2.imshow('BGR Image',img_bgr)
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
cv2.imshow('RGB Image',img_rgb )
cv2.waitkey(0)
Asi es imshow()
cambiando el orden dentro de la función automáticamente (de BGR a RGB) o el orden ha sido BGR todo el tiempo?
wm
BGR y RGB no son espacios de color, son solo convenciones para el orden de los diferentes canales de color. cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
no hace ningún cálculo (como una conversión para decir que HSV lo haría), simplemente cambia el orden. Cualquier orden sería válido; en realidad, los tres valores (rojo, verde y azul) se apilan para formar un píxel. Puede organizarlos como desee, siempre que le indique a la pantalla el orden que le dio.
OpenCV imread
, imwrite
y imshow
de hecho, todos funcionan con el orden BGR, por lo que no es necesario cambiar el orden cuando lee una imagen con cv2.imread
y luego quiero mostrarlo con cv2.imshow
.
Mientras que BGR se usa consistentemente en OpenCV, la mayoría de las otras bibliotecas de procesamiento de imágenes usan el orden RGB. Si quieres usar matplotlib
‘s imshow
pero lea la imagen con OpenCV, necesitaría convertir de BGR a RGB.
-
[Aside: Of course if you wanted to use
matplotlib
‘simshow
, you would need to convert..]– jtlz2
10 de enero de 2019 a las 11:40
-
Hice un experimento: usé solo Open cv para imread e imshow pero usé image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB) La imagen se volvió azul (BGR). ¡No puedo entender! ¿Alguien puede explicar?
– THEODOROPOULOS DIMITRIS
24 de noviembre de 2020 a las 11:57
-
Cualquier pedido es técnicamente válido, pero nunca he encontrado ninguna otra biblioteca de software que use BGR y no RGB. Otra forma en que OpenCV tiene una API terrible.
– qwr
26 de febrero a las 20:09
screen = cv2.cvtColor(screen, cv2.COLOR_RGB2BGR)
este código de una línea cambia rgb a bgr
para matplotlib necesitamos cambiar BGR a RGB:
img = cv2.imread("image_name")
img = img[...,::-1]
plt.imshow(img)
-
Esto también convertirá rgb a bgr. Así que hay que tener cuidado cuando se utilizan ambos tipos de imágenes.
– Senthil Vikram Vodapalli
17 de enero a las 7:16
opencv_image_with_bgr_channels = cv2.imread('path/to/color_image.jpg')
matplotlib_compatible_image_with_rgb_channels = opencv_image_with_bgr_channels[:,:, ::-1]
Esto convierte la imagen de canales BGR a RGB invirtiendo los canales.
Si no necesita usar ninguna otra biblioteca de procesamiento de imágenes (por ejemplo, imshow de Matplotlib), no es necesario realizar una conversión de escala de color. El siguiente código es un ejemplo, donde se realiza la conversión de escala de color pero cuando se carga la imagen, todavía se carga en BGR. Esta conversión no es necesaria ya que la imagen se muestra usando cv2.imshow().
import cv2
# read the image #
image = cv2.imread('<<Image Path>>')
image_rgb = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
# write a function to draw circles on the image #
def draw_circle(event,x,y,flags,params):
if event == cv2.EVENT_RBUTTONDOWN:
cv2.circle(img=image_rgb,center=(x,y),radius=100,color=(0,0,255),thickness=10)
# Open CV callbacks #
cv2.namedWindow(winname="ImageWindow")
cv2.setMouseCallback('ImageWindow',draw_circle)
# display the image till the user hits the ESC key #
while True:
cv2.imshow('ImageWindow',image_rgb)
if cv2.waitKey(20) & 0xFF == 27:
break
cv2.destroyAllWindows()
Venugopal Bukkala
Alternativamente, puede usar la función imutils.opencv2matplotlib(), que no necesita conversión de BGR a RGB.
Solo necesita convertir de BGR a RGB cuando vaya a/desde OpenCV y otras herramientas que usan el orden RGB. OpenCV es algo raro. La mayoría de las otras herramientas y formatos están en orden RGB. Al guardar desde OpenCV a formatos de imagen estándar, OpenCV realiza la conversión automáticamente. Pero al ir y venir a matplotlib, PIL o skimage, es posible que primero deba convertir a formato RGB, según las cosas que desee hacer en esos otros paquetes y si tiene la intención de volver a OpenCV.
– fmw42
30 de noviembre de 2021 a las 0:31