Как изменить значение определенного пикселя в полутоновом изображении? - PullRequest
0 голосов
/ 18 июня 2019

Я хочу изменить значение пикселя изображения в градациях серого, используя OpenCV.

Предположим, что у меня есть изображение в градациях серого, и я хочу преобразовать все его пиксели в значение 0 по одному. Так что результирующее изображение полностью черное. Я пробовал это, но в изображении нет изменений:

image = cv2.imread('test_image.png',0)

for i in range(image.shape[0]):
    for j in range(image.shape[1]):
        image[i, j] = 0

Результат:

показать обновленное изображение

Ответы [ 2 ]

1 голос
/ 18 июня 2019

В большинстве случаев вы хотите избегать использования двойных циклов for для изменения значений пикселей, поскольку они очень медленные. Лучшим подходом является использование Numpy для модификации пикселей, поскольку OpenCV использует массивы Numpy для отображения изображений. Для достижения желаемого результата вы можете использовать np.zeros, чтобы создать полностью черное изображение той же формы, что и исходное изображение.

import cv2
import numpy as np

image = cv2.imread("test_image.png", 0)

black = np.zeros(image.shape, np.uint8)

cv2.imshow('image', image)
cv2.imshow('black', black)
cv2.waitKey(0)

Например, с тестовым изображением. Оригинал (слева), результат (справа)

image image

0 голосов
/ 18 июня 2019

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

import cv2

image = cv2.imread('test_image.png',0)

#Creating a copy of the image to confirm right operation is performed on the image.
image_copy = image.copy() 
image_copy[:,:] = [0] #Setting all values to 0.
...