Вопрос по c# – Как выровнять контраст и яркость изображений с помощью opencv?

11

У меня есть изображение, которое я отсканировал, но белая бумага не белая на экране. Есть ли способ выровнять контракт / яркость, чтобы сделать фон белее?

Update

Я попробовал предложенную функцию Image._EqualizeHist от EmguCv:

<code>string file = @"IMG_20120512_055533.jpg";
Image<Bgr, byte> originalColour = new Image<Bgr, byte>(file);

Image<Bgr, byte> improved = originalColour.Clone();
improved._EqualizeHist();
</code>

Но получить еще худший результат (также, когда первый серый масштабируется):

Я пропускаю другие параметры?

Я не знаю почему, но уравнивание дает более худший результат в таких случаях ... у меня тоже иногда возникает эта проблема .. Abid Rahman K
Stack Overflow предоставляет бесплатный сервис для размещения изображений, просто нажмите кнопку с изображением на панели инструментов и укажите его на своем изображении, размещенном на вашем компьютере в другом месте в Интернете. Это фактически загружает и отражает копию изображения, что гарантирует, что оно будет всегда доступно, даже если внешний источник отключится. Я уже переместился на изображения, которые вы опубликовали, но просто кое-что, чтобы иметь в виду на будущее. Cody Gray♦

Ваш Ответ

5   ответов
-1

вы также можете проверить каждый пиксель. Установите значение 0, если оно меньше определенного значения, и установите значение 255, если оно превышает значение определения.

6

AdaptiveThreshold, Он работает, выполняя пороговые значения локального соседства для каждого пикселя изображения (это действительно важно, когда есть градиентный фон, немного сильнее, чем на вашем изображении).blockSize Параметр - это размер окрестности, а значение обработанных пикселей должно быть больше среднего значения окрестности минусparam1.

enter image description here

Вот как это сделать на python (его очень легко конвертировать в c):

import cv
im = cv.LoadImage("9jU1Um.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
cv.AdaptiveThreshold(im, im, 255, cv.CV_ADAPTIVE_THRESH_MEAN_C, 
                                  cv.CV_THRESH_BINARY, blockSize=31, param1=15)
cv.ShowImage('image', im)
cv.WaitKey(0)
1

вы можете умножить значения пикселей, а затем добавить к ним некоторую постоянную. (Подробнее оИзменение контрастности и яркости изображенияв документах OpenCV.)

Используя python и numpy:

import cv2 as cv
import numpy as np

img = cv.imread('b.jpg',0) # loads in grayscale

alpha = 1
beta = 0
res = cv.multiply(img, alpha)
res = cv.add(res, beta)

Вы также можете просто использовать:

res = cv.convertScaleAbs(img, alpha = alpha, beta = beta)

В своем изображении вы можете проверить на гистограмме, что максимальные значения составляют около 170 (на самом деле, это 172, если вы используетеimg.max()). Таким образом, вы можете умножить свое изображение на255/172 = 1.48 увеличить яркость.

Смотрите результаты ниже:

enter image description here

И гистограммы соответственно:

enter image description here

4

но результат должен быть именно тем, что вам нужно - более яркий фон и более темный текст.

EDIT

Чтобы извлечь только края (что сильно отличается от методов улучшения изображения), вы можете просто применить Canny. Выберите два пороговых значения 20 и 60 для начала, а затем увеличивайте (или уменьшайте их), сохраняя соотношение 3: 1 между ними, пока у вас не получится хорошо выглядящее изображение края.

19

Как я могу настроить контраст в OpenCV в C?

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

1) Thresholding:

Thresholding дает двоичное изображение. Если это то, что вы хотите, вы можете подать заявкуthreshold function

2) If grayscale image needed :

enter image description here

Additional :

Morphological closing также хорошо работать в вашем случае

img = cv2.imread('home.jpg',0)
kernel1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
close = cv2.morphologyEx(gray,cv2.MORPH_CLOSE,kernel1)
div = np.float32(gray)/(close)
res = np.uint8(cv2.normalize(div,div,0,255,cv2.NORM_MINMAX))

(код в Python API)

Результат ниже:

enter image description here

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы