Procesamiento de imágenes Python丨OpenCV+Biblioteca Numpy para leer y modificar píxeles

Resumen: Este artículo explica principalmente los conceptos básicos del procesamiento de imágenes de OpenCV+Numpy, incluida la lectura de píxeles y la modificación de píxeles.

Este artículo se comparte desde Huawei Cloud Community " [Procesamiento de imágenes de Python] 2. Lectura y modificación de píxeles de OpenCV+Numpy Library ", autor: eastmount.

1. Método de píxel de lectura tradicional

1. Imagen en escala de grises, devuelve el valor en escala de grises.

Valor de retorno = imagen (parámetro de posición), por ejemplo: p = img[88,142] print§

# -*- coding:utf-8 -*-
import cv2

#读取图片
img = cv2.imread("picture.bmp", cv2.IMREAD_UNCHANGED)

#灰度图像
p = img[88, 142]
print(p)

#显示图像
cv2.imshow("Demo", img)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

#写入图像
cv2.imwrite("testyxz.jpg", img)

El resultado de salida se muestra en la siguiente figura: [131 131 131], dado que la figura es un BMP de 24 bits, B=G=R genera tres resultados idénticos y algunas imágenes solo tienen un píxel y generan un valor.

2. Imagen BGR, el valor de retorno es el valor de B, G, R.

ejemplo:

b = img[78, 125, 0] imprimir(b)
g = img[78, 125, 1] ​​imprimir(g)
r = img[78,125, 2] imprimir®

# -*- coding:utf-8 -*-
import cv2

#读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)

#BGR图像
b = img[78, 125, 0]
print(b)
g = img[78, 125, 1]
print(g)
r = img[78, 125, 2]
print(r)

#方法二
bgr = img[78, 125]
print(bgr)

#显示图像
cv2.imshow("Demo", img)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

#写入图像
cv2.imwrite("testyxz.jpg", img)

Los píxeles de salida y las imágenes se ven así:

155
104
61
[155 104 61]

2. El método tradicional de modificación de píxeles

1. Modificar un solo valor de píxel

La imagen BGR puede acceder directamente al valor del píxel y modificarlo a través del parámetro de posición, y el resultado de salida es el siguiente:

# -*- coding:utf-8 -*-
import cv2

#读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)

#BGR图像
print(img[78, 125, 0])
print(img[78, 125, 1])
print(img[78, 125, 2])

#修改像素
img[78, 125, 0] = 255
img[78, 125, 1] = 255
img[78, 125, 2] =255

print(img[78, 125])
img[78, 125] = [10, 10, 10]
print(img[78, 125, 0])
print(img[78, 125, 1])
print(img[78, 125, 2])
#方法二
print(img[78, 125])
img[78, 125] = [10, 10, 10]
print(img[78, 125])

Los resultados de salida se muestran a continuación, y los valores de píxeles B, G, R se modifican a 255 y 0 mediante dos métodos, respectivamente.

155
104
61
255
255
255
[255 255 255]
[10 10 10]

2. Modificar los píxeles del área

La modificación de píxeles de área se realiza accediendo al área de posición de la matriz de imágenes, por ejemplo, [100:150, 400:500] es para acceder al área de las filas 100 a 150 y columnas 400 a 500, y luego modificar el píxeles en esta área. El código se ve así:

# -*- coding:utf-8 -*-
import cv2

#读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)

#BGR图像
img[100:150, 400:500] = [255, 255, 0]

#显示图像
cv2.imshow("Demo", img)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

#写入图像
cv2.imwrite("testyxz.jpg", img)

El resultado de salida se muestra en la siguiente figura, [255, 255, 0] es azul claro.

Método de lectura de píxeles Three.Numpy

Usando Numpy para la lectura de píxeles, el método de llamada es el siguiente:

valor de retorno = image.item(parámetro de posición)

# -*- coding:utf-8 -*-
import cv2
import numpy

#读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)

#Numpy读取像素
blue = img.item(78, 100, 0)
green = img.item(78, 100, 1)
red = img.item(78, 100, 2)
print(blue)
print(green)
print(red)

#显示图像
cv2.imshow("Demo", img)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

El resultado es el siguiente: tenga en cuenta que el canal de imagen leído por OpenCV es BGR, y también se puede convertir a RGB para su procesamiento.

155
104
61

Four.Numpy modifica el método de píxeles

Use la función de conjunto de elementos de Numpy para modificar píxeles, que se llama de la siguiente manera:

image.itemset(posición, nuevo valor)

Por ejemplo: img.itemset((88,99), 255)

# -*- coding:utf-8 -*-
import cv2
import numpy

#读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)

#Numpy读取像素
print(img.item(78, 100, 0))
print(img.item(78, 100, 1))
print(img.item(78, 100, 2))
img.itemset((78, 100, 0), 100)
img.itemset((78, 100, 1), 100)
img.itemset((78, 100, 2), 100)
print(img.item(78, 100, 0))
print(img.item(78, 100, 1))
print(img.item(78, 100, 2))

La salida es la siguiente:

155
104
61
100
100
100

También puede generar tres valores de B, G y R al mismo tiempo. El código central es el siguiente:

print(img[78, 78])
img.itemset((78, 78, 0), 0)
img.itemset((78, 78, 1), 0)
img.itemset((78, 78, 2), 0)
print(img[78, 78])
#[155 104  61]
#[0 0 0]

Este artículo es un extracto del libro electrónico "From Zero to One • Python Image Processing and Recognition" producido conjuntamente por la comunidad de desarrolladores eastmount X HUAWEI CLOUD.

Haga clic para descargar el libro electrónico gratuito "De cero a uno • Reconocimiento y procesamiento de imágenes de Python"

 

Haga clic en Seguir para conocer las nuevas tecnologías de HUAWEI CLOUD por primera vez~

{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/5516976
Recomendado
Clasificación