Notas de estudio de OpenCV 02: procesamiento de píxeles de imagen: imagen binaria, imagen en escala de grises, procesamiento de píxeles de imagen en color, funciones correspondientes en numpy.array

 contenido

(1) Procesamiento de píxeles de imagen en escala de grises

(2) procesamiento de píxeles de imagen en color

(3) Aplicación de la biblioteca numpy.array en el procesamiento de imágenes

(4) Ver la información de atributos de la imagen


        Luego, la nota 01 continúa resumiendo, cuando leemos una imagen, generalmente es una imagen binaria, una imagen en escala de grises y una imagen en color. Una imagen binaria es que los píxeles que componen la imagen son negros o blancos, solo hay dos valores, en el tipo doble, 0 representa el negro y 1 representa el blanco. Para uint8, 0 representa el negro y 255 representa el blanco.Si los píxeles de la imagen no solo están compuestos de dos colores, sino también de gris entre el blanco y el negro, es decir, divida el espacio entre el blanco y el negro en varios segmentos, y cada segmento representa el gris Los grados son diferentes, y la imagen que se muestra en este momento es una imagen en escala de grises. Las imágenes en color tienen un impacto diferente en el color. Por ejemplo, las imágenes en color rgb se componen de tres canales, y cada valor de píxel de color es un color que se presenta al superponer los valores de píxel correspondientes en los tres canales.

(1) Procesamiento de píxeles de imagen en escala de grises

Aquí, la imagen en escala de grises de lena utilizada se publica primero, para que todos puedan practicar. Como se muestra abajo.

Ideas:

El primer paso: primero lea el archivo y luego muestre su matriz de valores compuesta de píxeles para mostrar la imagen original.

Paso 2: acceda a un cierto valor de píxel o ciertos valores de píxel en la matriz de imagen original y luego modifique estos valores de píxel

Paso 3: Muestre la imagen modificada y los valores de píxel modificados.

el código se muestra a continuación:

import cv2
# 读取灰度图像,然后对像素值和图像显示,然后修改之后显示修改之后的图像和像素
filename = r'C:\Users\LBS\Desktop\lenagray.png'
# 读取图像
f = cv2.imread(filename)
# 显示图像,one是显示图像的窗口的名字
cv2.imshow('one', f)
# 打印图像对应的像素值的矩阵
print(f)
# 利用for循环对原图像的第10行到第99行,第80列到第99列的像素值改为255,
for i in range(10,100):
    for j in range(80,100):
        f[i, j] = 255
# two代表修改后的图像
cv2.imshow('two', f)
print('f(10:100, 80:100)={0}'.format(f[10:100, 80:100]))
# 按下任意键关闭图像窗口
cv2.waitKey()
cv2.destroyAllWindows()

resultado:

La imagen de la izquierda es la imagen original, y la imagen de la derecha es después de nuestra modificación.Se puede ver que aparece un cuadro blanco rectangular porque le hemos asignado un valor de píxel de 255.

El resultado del píxel de salida es:

La parte modificada se ha convertido en 255. 

(2), procesamiento de píxeles de imagen en color

        Cuando la imagen en color rgb se lee en opencv para su procesamiento, la primera capa, la segunda capa y la tercera capa corresponden al canal b, al canal g y al canal r, respectivamente, y el orden correspondiente de los canales en matlab el procesamiento es todo lo contrario. Pero no afecta nuestras operaciones en cada canal. Agregue una imagen como f, luego f[:,:,0], f[:,:,1], f[:,:,2] corresponden a los valores de píxel del canal b, canal g y r canal de la imagen, también puede usar cv2.split(f)[0], cv2.split(f)[1], cv2.split(f)[2] para obtener tres canales. Cada canal puede considerarse como una matriz de valores de píxeles correspondientes a una imagen en escala de grises.

En la imagen f[x, y, z], x representa la fila de la imagen, y representa la columna de la imagen y z representa un canal. Si es f[x, y], son los tres canales correspondientes , y la salida impresa x fila y columna tiene tres valores

Ideas:

El primer paso: primero obtener una matriz tridimensional de imágenes en color. Si es necesario, obtenga una matriz bidimensional de valores de píxeles para cada canal

Paso 2: luego modifique los píxeles de la matriz 3D accediendo a sus valores de píxeles.

Paso 3: Muestre la imagen cuyo valor de píxel se ha modificado e imprima la información del valor del píxel modificado.

Código correspondiente:

import numpy as np
import cv2
# 读取彩色图像
filename = r'C:\Users\LBS\Desktop\lena.jpg'
f = cv2.imread(filename)
# 显示彩色图像
cv2.imshow('01', f)
print("修改像素之前,个别像素对应的像素值\n")
# 图像f[x,y,z]中x代表图像的行,y代表图像的列,z代表的某一通道,若为f[x,y],则是对应的三个通道,打印输出的x行y列有三个值
print("f[0, 0]=\n", f[0, 0])
print("f[50,0]=\n", f[50, 0])
print("f[100,0]\n", f[100, 0])
# 对彩色图像的像素进行处理,这里的三重for循环是对三个通道的值都进行修改
for i in range(0, 50):
    for j in range(0, 100):
        for k in range(0, 3):
            f[i, j, k] = 255
for i in range(50, 100):
    for j in range(0, 100):
        for k in range(0, 3):
            f[i, j, k] = 128
# 如果没有指定对0、1、2、中的哪个通道对应的像素值进行修改时,则同时修改的是三个通道对应的像素值,三个通道都被修改为相同的值。
# 这里三个通道对应的值都为0,即黑色,可以通过图像进行观察
for i in range(100, 150):
    for j in range(0, 100):
        f[i, j] = 0
# 显示修改之后的图像
cv2.imshow('02', f)
print("修改像素之后,个别像素对应的像素值\n")
print("f[0, 0]=\n", f[0, 0])
print("f[50,0]=\n", f[50, 0])
print("f[100,0]\n", f[100, 0])
cv2.waitKey()
cv2.destroyAllWindows()

La imagen de resultado correspondiente se muestra en la siguiente figura:

01 es la imagen original, 02 es la imagen modificada. 

El resultado de la impresión antes y después de cambiar el valor de píxel se muestra en la siguiente figura.

 (3) Aplicación de la biblioteca numpy.array en el procesamiento de imágenes

       Hay dos funciones en esta biblioteca, item(), itemset(), que se pueden usar para acceder a los píxeles y modificar los valores de los píxeles, si no se usan estas dos funciones, también podemos operar, al igual que la anterior (1), ( 2) Todos operamos directamente a través del objeto imagen.

Para imágenes en escala de grises:

item (fila, columna): item es nuestro objeto de imagen, al igual que la f anterior, podemos determinar el valor de un píxel por fila y columna.

conjunto de elementos ((fila, columna), el valor a modificar): Esto es un poco más conveniente que nuestra operación anterior. A través de esta declaración, los píxeles se pueden modificar directamente.

Para imágenes en color:

item (fila, columna, canal): item es nuestro objeto de imagen, como el f anterior, por fila y columna, y canal podemos determinar el valor de un píxel en un determinado canal.

conjunto de elementos ((fila, columna, canal), valor a modificar): es decir, primero determine un píxel por (fila, columna, canal) y luego cámbielo con el valor a modificar. Si se omite el valor del canal, se realiza la misma operación de asignación de valor sobre los valores de los tres canales.

(4) Ver la información de atributos de la imagen

Si f representa una imagen, puedes pasar

f.shape: Obtenga el número de filas, columnas y canales de la imagen (para imágenes en color).

f.size: Obtiene el número de píxeles de la imagen, es decir, cuántos píxeles tiene la imagen completa.

f.dtype: puede ver el tipo de datos de la imagen f.

Resumen: lo anterior es el funcionamiento básico de los píxeles, practique.

Indique la fuente. No es fácil de escribir, dale a me gusta.

Notas de estudio de OpenCV 03--operación de imagen--operación de adición de imagen, operación de bit de imagen, máscara de imagen

Supongo que te gusta

Origin blog.csdn.net/BaoITcore/article/details/123918053
Recomendado
Clasificación