0

У меня есть изображение png, которое находится в оттенках серого 'test.png'. Мне нужно применить адаптивный порог к этому изображению. Я использую OpenCV.Применение адаптивного порога к полутоновому изображению

image = cv2.imread('test_big.png') 
im = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) 

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

image = cv2.imread('test_big.png',1) 

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

ответ

0

Вина во втором фрагменте коды:

image = cv2.imread('test_big.png',1) 

Хотя вы сказали, что test_big.png является черно-белым изображением, вы объявили его в виде цветного изображения (RGB) с тремя каналами.

Следовательно, вы должны изменить код

image = cv2.imread('test_big.png', 0) 
  • 0 -> полутоновое изображение
  • 1 -> цветное изображение

Вы также можете попробовать:

cv2.imread('test_big.png', cv2.IMREAD_GRAYSCALE)

Суть заключается в следующем: хотя считываемое изображение представляет собой изображение в оттенках серого, система не распознает его до тех пор, пока он не будет явно указан. В вашем случае ваше изображение было полутоновым изображением, но, поскольку вы объявили его как цветное изображение, оно считало изображение имеющим три канала (RGB), и, следовательно, последующая функция адаптивного порога не выполнялась.

+0

'cv2.imread ('test_big.png', cv2.IMREAD_GRAYSCALE)' будет более читаемым и самодокументированным. – Yigal

+0

@Yigal Done !! редактирование !! –