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

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

import cv2


img=cv2.imread('rose.jpg',0)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

height=img.shape[0]
print("h=",h)
width=img.shape[1]
print("w=",w)  

for i in range(height):
    for j in range(width):
        k=img[i,j]
        print(k)

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Я попытался применить вашу логику и закодировал это, и это работает!

import numpy as np
import cv2

img = cv2.imread("rose.jpg", cv2.IMREAD_GRAYSCALE)
height = img.shape[0]
width = img.shape[1]
threshold = 150

for i in np.arange(height):
    for j in np.arange(width):
        a = img.item(i,j) 
        if a > threshold:
           b = 255
        else:
           b = 0
    img.itemset((i,j), b)

cv2.imwrite('binary.jpg', img)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
0 голосов
/ 06 ноября 2019

Я бы рекомендовал использовать функцию порога, встроенную в opencv.

threshold,threshold_image = cv2.threshold(img,127,255,cv2.THRESH_BINARY) 

Где 127 - это пороговое значение, 255 - это максимальное значение, а cv2.THRESH_BINARY указывает двоичное пороговое значение. Вы можете использовать его вместо cv2.THRESH_BINARY_INV, если вам нужно его перевернуть.

threshold_image будет тем изображением, которое вас интересует.

Возможно, вам придется сначала преобразовать изображение в градации серого, что может бытьсделано с

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...