separación de canales opencv división, fusión

1.División de clasificación de canales ()

La separación de canales se puede utilizar para el procesamiento de imágenes en color. El objeto de la imagen puede ser una imagen en color BGR normal de 3 canales, y los tres canales después de la separación son b, g y r.
Si se trata de una imagen BGRA de 4 canales con un canal alfa, son b, g, r y a después de la separación. ]
Si la imagen es una imagen en otros espacios de color, como una imagen HSV, las tres imágenes separadas son h, s y v respectivamente.

import cv2
def show_img(win_name,img,wait_time=0,img_ratio=0.5,is_show=True):
    if is_show is not True:
        return 
    rows = img.shape[0]
    cols = img.shape[1]
    cv2.namedWindow(win_name, cv2.WINDOW_NORMAL )#cv2.WINDOW_AUTOSIZE)
    cv2.resizeWindow(win_name,(int(cols*img_ratio),int(rows*img_ratio)))
    cv2.imshow(win_name,img)
    if wait_time >= 0:
        cv2.waitKey(wait_time)
        
img = cv2.imread('..\\lena.jpg')
#img = cv2.imread('..\\opencv-logo.png',cv2.IMREAD_UNCHANGED)
if img is not None and len(img.shape)==3: #彩色图像才可以做通道分离
    print('img.shape:',img.shape)
    show_img('img',img,-1)  
    if img.shape[2] == 3:                 #如果是3通道,分离出3个图像实例
        b,g,r = cv2.split(img)     
        show_img('b',b,-1)
        show_img('g',g,-1)
        show_img('r',r,-1)
        cv2.waitKey(0)
    elif img.shape[2] == 4:               #如果是4通道
        b,g,r,a = cv2.split(img)
        show_img('b',b,-1)
        show_img('g',g,-1)
        show_img('r',r,-1)
        show_img('a',a,-1) 
        cv2.waitKey(0)

2. La separación de canales en modo índice
utiliza operaciones de indexación o división de matrices numerosas, como el uso de img[:,:,0] para separar el canal 0 o el canal b, img[:,:,1] corresponde al canal g, img[ ::,: ,2] corresponde al canal r, y si hay img[:,:,3], corresponde al canal alfa.

if img.shape[2] == 3:                 #如果是3通道,分离出3个图像实例
        b = img[:,:,0]
        g = img[:,:,1]    
        r = img[:,:,2]             
        show_img('b',b,-1)
        show_img('g',g,-1)
        show_img('r',r,-1)
        cv2.waitKey(0)
elif img.shape[2] == 4:               #如果是4通道
        b = img[:,:,0]
        g = img[:,:,1]    
        r = img[:,:,2]    
        a = img[:,:,3] 
        show_img('b',b,-1)
        show_img('g',g,-1)
        show_img('r',r,-1)
        show_img('a',a,-1) 
        cv2.waitKey(0)

3. Fusión de canales merge()
Las imágenes de múltiples canales existentes se construyen en una tupla y se pasan a merge() para lograr la fusión de imágenes.
El parámetro de merge() es una tupla compuesta de imágenes multicanal.

import cv2
img = cv2.imread('lena.jpg')  
b = img[:,:,0]
g = img[:,:,1]    
r = img[:,:,2]             
img2 = cv2.merge((b,g,r)) #传入bgr构成的元组
cv2.imshow('merged',img2) 
cv2.waitKey(0)

4. Separar imágenes en escala de grises

import cv2
img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE) 
print('img.shape:',img.shape)
res = cv2.split(img)
#单通道的灰度图用split()分离后,实际得到的是一个包含了array类型的list,效果和对一个numpy数组做split操作是类似的。

Supongo que te gusta

Origin blog.csdn.net/aqiangdeba/article/details/129762727
Recomendado
Clasificación